如果在一定时间后没有完成,我想要一个我创建的线程。有没有优雅和/或惯用的方式来做到这一点?现在我想创建一个观察者线程:
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
答案 0 :(得分:6)
也许Timeout课程就是你所需要的。
def myfunc
Thread.new{
Timeout::timeout(20) {
#do stuff
}
}
# continue on asynchronously
end
答案 1 :(得分:3)
我相信在大多数情况下,你应该通过线程中的程序逻辑来控制线程的“生命”。
假设线程实际上是一个无限循环,而不是普通的while(true),你可能有一个实例变量(例如is_running)并使循环变成while(is_running)。如果其他线程想要停止这个线程,他们可以简单地(直接或间接)使is_running为false。然后,工作线程可以完成手头的最后一项工作并完成循环。