我正在运行一个线程将“数据”放到屏幕上。 该线程的目的是阻止此函数的阻塞,这样我就可以在回收数据的同时将数据发送到套接字。
def msg_loop()
t1 = Thread.new{
loop do
msg = @socket.recv(30)
self.msg_dis(msg)
end
}
t1.join
end
但是如果我跑
myclass.msg_loop
myclass.send_msg("message to send")
函数send_msg永远不会运行,与msg_loop没有线程没有区别。
答案 0 :(得分:2)
t1.join
导致程序等到线程t1运行完毕。你想这样做。
def msg_loop()
t1 = Thread.new{
loop do
msg = @socket.recv(30)
self.msg_dis(msg)
end
}
t1
end
t1 = myclass.msg_loop
myclass.send_msg("message to send")
t1.join
答案 1 :(得分:-2)
Ruby并没有提供真正的线程(jruby确实如此)。 有一个无限循环,例如我在ruby中的线程,并没有做任何事情,因为循环永远不会结束。
这会导致线程永远不会发生阻塞。