终止所有线程或当前正在运行的线程保持进程在C++中保持活跃状态​​

问题描述:

我想在收到停止消息时终止当前正在运行的进程的所有线程。但我希望该流程仍能继续运行以接受新请求。我使用C++ std :: thread而不是pthreads终止所有线程或当前正在运行的线程保持进程在C++中保持活跃状态​​

+2

将停止消息转发给所有正在运行的线程,并让它们定期检查消息并在找到时返回。 – user4581301

+0

该进程比它启动的n个线程多1个线程。我称这个线程为'main()',并且它继续运行直到它退出。 –

+0

你可能不想杀死(终止)线程,因为他们可能握着一个锁或其他东西,会搅乱一切。你想要很好地问他们,当他们处于好的状态时终止。这意味着线程需要定期检查它们是否应该退出。 –

简而言之:你不能在ISO C++中杀死线程。你只能重复轮询线程内的标志并停止进一步处理。由于std :: threads通常是在linux上的pthreads之上实现的,所以你可以利用这个API,例如,看看pthread_cancel。但请记住,这不会触发任何C++析构函数,因此在执行此操作时必须非常小心以避免资源泄漏。