C 11 std ::线程以单独的方法加入主线程
C++11 std::thread join to main thread in a separate method
我有以下代码:
void do_join(std::thread& t)
{
t.join();
}
void join_all(std::vector<std::thread>& v)
{
std::for_each(v.begin(),v.end(),do_join);
}
int main()
{
std::vector<std::thread> myThreads;
for(int i = 1; i <= 3; i++)
{
myThreads.push_back(std::thread(threadMethod));
}
join_all(myThreads);
}
目标是在循环中创建多个线程,将它们添加到线程 vector ,然后通过向量迭代将它们加入到 main thread。>
问题是,当我的 do_join 方法第一次执行时,它加入线程并等待,而不是从a vector 中加入任何其他线程。那是因为我的线程正在使用一些条件变量,并等待其他一些任务完成。好像 do_join 方法正在等待加入线程完成。
如果我直接在 main 函数中尝试 for_each ,也会发生同样的事情。
这个想法是能够将所有这些线程连接到 main 线程,而不是我想在这里发生的 do_join do_join 的方法线程。我当然可以分别加入并分别创建它们,因为实际上我不需要它们进入向量(从一开始就知道线程的数量),但是我需要一个向量,因为实际上使用了我的应用程序中的每个线程我未包含在该示例代码中的不同方法的参数。我只是不想为正在创建和加入的每个线程的新线路。
谢谢您的任何帮助!
编辑:也许值得一提的是我正在使用Ubuntu。
join
方法按定义阻止当前线程,直到您尝试加入的线程已完成:
阻止当前线程直到
*this
识别的线程 完成其执行。
(从这里。)
也就是说, join
的目的阻止其线程直到另一个螺纹结束。如果您不希望该线程被阻止,则不要使用join
。
您应该问自己一个问题:您要实现什么?如果您只想在所有其他线程完成时才继续进行主程序,那么您现在正在做的事情是正确的,无论如何,您都必须等待所有线程。否则,您可能需要某种方法才能向其他线程发出信号。
相关文章:
- 方法重写线程C++中的概念
- 使用基类中的派生方法运行线程,而无需使用模板
- 将线程中的数据存储到全局容器的最佳方法?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 如何将带有参数的方法传递给线程以执行?
- C++ POCO - 如何在不使用 run() 方法的情况下启动线程池上的线程?
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- C++中的多线程:连接线程的正确方法
- 使用包含互斥锁的类的方法实例化 cpp11 线程
- 如何在JNI中从线程内部调用JAVA方法
- 如何从另一个线程调用颤振引擎方法
- 在另一个线程上发出 QObject 信号的正确方法?
- 在C++线程内实现多个计时器的最安全方法
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 将指针传递到另一个线程的正确方法
- 在另一个 QThread 上运行成员方法时,无法将事件发送到其他线程拥有的对象
- 支持多线程方法来构建数组中所有元素的集合吗
- 这两种线程方法之间有什么区别
- 什么是Qt中低延迟音频合成的最佳多线程方法
- 将不同的线程方法组合到Windows窗体应用程序中