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