Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果在加入线程后N秒内未完成,如何终止线程?_C++_Multithreading - Fatal编程技术网

C++ 如果在加入线程后N秒内未完成,如何终止线程?

C++ 如果在加入线程后N秒内未完成,如何终止线程?,c++,multithreading,C++,Multithreading,我使用这样的模式: boost::thread receiverThread; .... stayConnected = false; if (receiverThread.joinable()) { receiverThread.join(); } receiverThread线程定期检查stayConnected标志,当它设置为false时,它应该终止 现在我想保护主代码不受“坏的”receiverThread,如果receiverThread在5秒后没有完成,我想杀死它: boo

我使用这样的模式:

boost::thread receiverThread;
....
stayConnected = false;
if (receiverThread.joinable()) {
    receiverThread.join();
}
receiverThread
线程定期检查
stayConnected
标志,当它设置为
false
时,它应该终止

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

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

执行此操作的最佳方法是什么?

Boost不提供任何线程:

9为什么不提供线程取消或终止? 线程终止是有必要的,所以在某个时候,
Boost.thread
可能会包含它,但只有在我们找到一种真正安全(且可移植)的机制来实现这个概念之后


但是,最好在一些安全点检查
stayConnected
。如果你在这两个点之间需要花很多时间,试着在这两个点之间找到一个新的安全点。

谢谢,我想我可能会使用
try\u join\u for
,我正在寻找一个例子。