我想要創建一個線程,如果它在一段時間後沒有完成就會死掉。有沒有優雅和/或慣用的方式來做到這一點?現在我想做出一個觀察者線程:如何在一段時間後殺死一個紅寶石線程?
def myfunc
t = Thread.new{
#do stuff
}
# watcher thread
Thread.new{
result = t.join(20) # join returns nil if it timed out
t.kill if result.nil?
}
# continue on asynchronously from both threads
end
啊哈,太棒了!我編輯你的答案,包括如何使用它來解決問題的例子... –
我認爲你不需要在一個線程中包裝Timeout對象。 Timeout爲代碼塊創建了一個線程,所以你不需要,除非你希望整個事物是異步的。 – Miguel
是的,我希望它是異步的 - 這就是點,我想線程清理自己,如果它卡住了。 –