Ruby线程的问题

时间:2011-08-15 06:46:01

标签: ruby multithreading xmpp

我使用“SimpleMUCClient”编写simple bot。但得到了错误:app.rb:73:stop': deadlock detected (fatal) from app.rb:73:in'。如何解决?

1 个答案:

答案 0 :(得分:1)

您运行的代码很可能是在另一个线程中执行的。然后使用Thread.join()加入该特定线程(意味着Ruby在退出脚本时等待它完成)。在调用Thread.stop()的同时调用.join()很可能是导致死锁的原因。说过你应该遵循StackOverflow关于如何正确提问的指南,因为你还没有这样做,我已经投了你的问题。

在仍然调用Thread.stop的同时加入一个帖子可以完成如下:

th = Thread.new do
  Thread.stop
end

if th.status === 'sleep'
  th.run
else
  th.join
end

这不是最干净的方式,但它有效。此外,如果您想要实际终止某个帖子,则必须改为调用Thread.exit