我正在尝试在执行其他任务时侦听套接字,但我的程序只是停留在侦听循环中而无法执行任何其他操作。我正在使用的代码是:
t = Thread.new do
@listener.listen
end
t.join
puts('do more stuff')
@listener.listen
的位置:
def listen
puts('listening')
while true
data = p @socket.recv(1000) # Receive
respond(JSON.parse(data))
end
end
如果我这样做,程序会陷入while循环,并且永远不会打印“do more stuff”。任何人都知道为什么会这样吗?
答案 0 :(得分:1)
您不想致电join
。 join
等待其线程完成。
答案 1 :(得分:1)
线程不太适合。基本上,您需要的是一个循环,它为新任务设置回调并转移到下一个任务。您可能希望使用EventMachine检查事件循环方法。
尝试设置abort_on_exception
以检查异常和超时(以秒为单位):
Thread.abort_on_exception = true
t = Thread.new do
@listener.listen
end
t.join(5) #Does not return until all threads exit or 5 sec(timeout) have passed.
此外,在listen?
:
def listen
puts('listening')
while true
data = p @socket.recv(1000) # Receive
respond(JSON.parse(data))
end
end
你有一个无限循环while true
。你检查它是否会返回假?
def listen
puts('listening')
loop do
data = p @socket.recv(1000) # Receive
result = respond(JSON.parse(data))
if result
puts "Still True."
else
puts "Got False. Exiting loop.."
break
end
end
result
end
希望它有所帮助。