我正在使用这样的模式:
boost::thread receiverThread;
....
stayConnected = false;
if (receiverThread.joinable()) {
receiverThread.join();
}
receiverThread
线程定期检查stayConnected
标志,当它设置为false
时,它应该终止。
现在我想保护主要代码免受“坏”receiverThread
的影响,如果{5}后receiverThread
没有完成我想杀死它:
boost::thread receiverThread;
....
stayConnected = false;
if (receiverThread.joinable()) {
receiverThread.join();
// not to hang forever, if receiverThread not finished after 5 seconds, kill it
}
这样做的最佳方式是什么?
答案 0 :(得分:0)
Boost不提供任何线程cancellation/termination:
9。为什么不提供线程取消或终止?
有一个有效的线程终止需求,所以在某些时候
Boost.Thread
可能会包含它,但只有在我们能够为这个概念找到真正安全(和可移植)的机制之后。
但是,最好在某些安全点检查stayConnected
。如果您需要花费很多时间在这些点之间传递,请尝试在中间找到新的安全点。