当我在一个线程执行(在activemq cpp中)中捕获特定值时,如何终止/停止所有其他线程?
Posted
技术标签:
【中文标题】当我在一个线程执行(在activemq cpp中)中捕获特定值时,如何终止/停止所有其他线程?【英文标题】:How do I terminate/stop all other thread when I catch specific value in one of the thread execution (in activemq cpp)? 【发布时间】:2020-02-19 05:37:38 【问题描述】:我已经并行启动了 5 个调用特定函数的线程。如果其中一个返回某个特定值,我需要终止所有其他剩余线程的进一步处理,并在 onMessage() 方法中异步调用特定函数。
【问题讨论】:
【参考方案1】:将std::atomic<bool>& terminate_flag
传递给所有启动的线程。当一个进程找到搜索的值时,更新terminate_flag
。所有线程都应该运行一个无限循环?修改循环以在 terminate_flag
设置为 true
时退出。
void thread_function(std::atomic<bool>& terminate_flag, T& search_value, ...)
while(terminate_flag == false)
...do stuff...
if (found_value == search_value)
terminate_flag = true;
【讨论】:
但即使使用它,thread_function 也会在每个线程中至少运行一次,对吧? @约翰 如果一个线程碰巧在第二个线程启动之前找到了该值,那么第二个线程将不会运行。好吧,它会运行,但terminate_flag
将设置为true
,它会跳过循环中的所有内容然后终止。以上是关于当我在一个线程执行(在activemq cpp中)中捕获特定值时,如何终止/停止所有其他线程?的主要内容,如果未能解决你的问题,请参考以下文章
使用 activemq-cpp 库创建新线程期间的分段错误问题
activemq-cpp pull consumer 接收远程地址