我想在后台启动一个帖子,并希望在一定时间后停止它,如果它没有完成。主要问题是,在等待线程完成或计时器到达截止日期时,程序不应该阻塞。重要的是保证这一点。
我尝试了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;
}
}
你有什么建议吗?
答案 0 :(得分:0)
你可以启动一个线程来启动你的线程并等待timed_join。
main
|
|---thread
| |
| |-----thread
| |
| |
| |
| join<------
|
|
但是如果你只想要一个警告,请在启动线程之前把它放好。如果它是一个图形应用程序并且你仍然想要处理事件,你必须让你的主线程可用,如上所示。
答案 1 :(得分:0)
必须停止的线程可能会在一段时间后自行退出。
例如,如果它在循环中执行所有工作,它可以定期检查(例如,循环的每10次迭代),如果已经过了最大时间量,并且在时间已经过去的情况下退出。
主线程偶尔可以检查完成作业的线程(或过早终止)并删除它们。