在For Loop C ++中创建线程

时间:2019-02-06 10:28:15

标签: 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();

}

}

对于此块,我收到一条错误消息,指出“ void * function()的值类型不能用于初始化std :: thread的实体类型。.

我该如何纠正我的错误。还有其他有效的方法可以做到这一点。

1 个答案:

答案 0 :(得分:4)

您需要存储线程本身,而不是线程的指针。您在这里没有创建任何线程。

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

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();

}