中断线程后的时间量,没有阻塞而等待
问题描述:
我想在后台启动一个线程,并希望在一段时间后停止它,如果它没有完成。主要问题是,在等待线程完成或定时器到达最后期限时,程序不应该阻塞。重要的是要保证这一点。中断线程后的时间量,没有阻塞而等待
我试过this example,但在等待timed_join
时,它会阻塞。我必须宣布正在进行一些计算的警告。
void CallbackReceived() {
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(500);
boost::thread thrd(&Foo);
if (thrd.timed_join(timeout)) {
//finished
} else {
//Not finished;
}
}
您有什么建议吗?
答
您可以启动一个线程来启动线程并等待timed_join。
main
|
|---thread
| |
| |-----thread
| |
| |
| |
| join<------
|
|
但是,如果你只是想要一个警告,把它放在开始线程之前。如果它是一个图形应用程序,并且您仍然想要处理事件,则必须使主线程可用,如上所示。
答
必须停止的线程可能会在一段时间后自行退出。例如,如果它执行循环中的所有工作,则它可以定期检查(例如,每10次迭代循环)如果最大时间已经过去并且在时间已过的情况下退出。
不时地,主线程可以检查完成作业的线程(或过早终止)并删除它们。
关闭我头顶的'在等待完成之前宣布警告','有另一个后台线程负责监视第一个线程','更改第一个线程以便意识到时间限制并可以中止本身..' – forsvarir
开始另一个线程,将调用'timed_join'。 –
@forsvarir我会做出这个答案。 – RedX