0

我正在使用这样的模式:

boost::thread receiverThread;
....
stayConnected = false;
if (receiverThread.joinable()) {
    receiverThread.join();
}

receiverThread线程定期检查stayConnected标志,当它设置为false它应该终止。

现在我想保护主代码免受“坏”的影响receiverThread,如果receiverThread5 秒后没有完成,我想杀死它:

boost::thread receiverThread;
....
stayConnected = false;
if (receiverThread.joinable()) {
    receiverThread.join();
    // not to hang forever, if receiverThread not finished after 5 seconds, kill it
}

做这个的最好方式是什么?

4

1 回答 1

0

Boost 不提供任何线程取消/终止

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

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

但是,最好stayConnected在一些安全点进行检查。如果您必须在这些点之间花很多时间,请尝试在两者之间找到一个新的安全点。

于 2013-11-11T07:44:19.350 回答