如何在我加入后N秒内完成终止线程?

时间:2013-11-11 07:38:33

标签: c++ multithreading

我正在使用这样的模式:

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
}

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

Boost不提供任何线程cancellation/termination

  

9。为什么不提供线程取消或终止?

     

有一个有效的线程终止需求,所以在某些时候Boost.Thread可能会包含它,但只有在我们能够为这个概念找到真正安全(和可移植)的机制之后。

但是,最好在某些安全点检查stayConnected。如果您需要花费很多时间在这些点之间传递,请尝试在中间找到新的安全点。