2010-03-08 100 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