从STDIN.gets等待用户输入时脚本停止

时间:2010-03-08 06:04:19

标签: ruby multithreading oop loops

我正在尝试做这样的事情,我有两个循环进入单独的线程。我遇到的问题是,在主线程中,当我使用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

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

有没有办法在等待用户输入时使主线程阻塞?

2 个答案:

答案 0 :(得分:0)

您可能希望了解使用IO类的select方法。看看

good select example用于处理带异步输入的select。根据您正在使用的ruby版本,您可能会遇到STDIN问题,我很确定它总是触发1.8.6中的select。

答案 1 :(得分: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