当我在一个线程执行(在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 接收远程地址

ActiveMQ CMS:有没有办法在没有线程的情况下使用它?

静态链接 ActiveMQ-cpp

activemq-cpp编译

如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费