c++ - 在 For 循环 C++ 中创建线程

标签 c++ multithreading

我一直在尝试在 for 循环中使用多线程。 基本代码块将是这样的,

void function(int a, string b, MyClass &Obj, MyClass2 &Obj2)
{

//execution part

}

void anotherclass::MembrFunc()
{

std::vector<std::thread*> ThreadVector;

for(some condition)
{

    std::thread *mythread(function,a,b,obj1,obj2) // creating a thread that will run parallely until it satisfies for loop condition
    ThreadVector.push_back(mythread)

}
for(condition to join threads in threadvector)
{

    Threadvector[index].join();

}

}

对于这个 block ,我收到一个错误消息“void* function() 的值类型不能用于初始化 std::thread 的实体类型..

我该如何纠正我的错误..还有其他有效的方法吗?

最佳答案

您需要存储线程本身,而不是指向线程的指针。您不会在此处创建任何线程。

您还需要获得一个可运行的对象。所以像这样:

std::vector<std::thread> ThreadVector;

for(some condition)
{
    ThreadVector.emplace_back([&](){function(a, b, Obj, Obj2);}); // Pass by reference here, make sure the object lifetime is correct

}
for(auto& t: Threadvector)
{
    t.join();

}

编辑:添加缺失;

关于c++ - 在 For 循环 C++ 中创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551371/

相关文章:

c++ - 在 C++ 中初始化结构,然后通过引用传递检索

c# - "relevant"是XmlWriterTraceListener的非线程安全性如何?

c++ - 嵌套的 openMP 并行化结合 std::thread

java - 队列的线程安全映射

c++ - 将相同的值转发给两个或多个函数

C++ : Best practice when implementing Multiple inheritance

c++ - GLM 矩阵乘法 vector 给出不正确的结果

c++ - 在 Effective C++ 中被仿函数语法抛出

c++ - 有两个线程的运行时间与一个线程的运行时间没有改善

multithreading - Rust 是否有内置或规范的方式来处理 ‘publish’ 状态?