2010-03-08 61 views
0

我正在嘗試這樣做,其中我有兩個循環將在單獨的線程中進行。我遇到的問題是,在主線程中,當我使用gets並且腳本正在等待用戶輸入時,另一個線程也停止等待。在等待用戶輸入STDIN.gets時停止腳本

class Server 
    def initialize 
    @server = TCPServer.new(8080) 
    run 
    end 

    def run 
    @thread = Thread.new(@server) { |server| 
     while true 
     newsock = server.accept 
     puts "some stuff after accept!" 
     next if !newsock 
     # some other stuff 
     end 
    } 
    end 
end 

def processCommand 
    # some user commands here 
end 

test = Server.new 
while true do 
    processCommand(STDIN.gets) 
end 

以上只是我想要做的一個示例。

有沒有辦法讓主線程塊在等待用戶輸入?

+0

您的意思是「有沒有辦法讓***只有***的主線程塊...」? – DigitalRoss 2010-03-08 06:07:47

+0

在沒有采用任何參數的方法定義之後,我擺脫了方括號。 – 2011-03-06 22:41:13

回答

0

您可能想看看使用IO類的select方法。看看

good select example用於處理選擇與異步輸入。取決於你使用的是什麼版本的ruby,你可能會遇到STDIN的問題,但我敢肯定它總是觸發1.8.6的選擇。

0

我不確定這是你在找什麼,但我正在尋找類似的東西,這個例子確實是我想要的。線程將繼續處理,直到用戶點擊輸入,然後該線程將能夠根據需要處理您的用戶輸入。

user_input = nil 

t1 = Thread.new do 
    while !user_input 
     puts "Running" 
    end 
    puts "Stopping per user input: #{user_input}" 
end 

user_input = STDIN.gets 
t1.join