在 For 循环内创建线程 C++

2024-03-29

我一直在 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 的实体类型。”

我如何纠正我的错误..有没有其他有效的方法来做到这一点。


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

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

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

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 For 循环内创建线程 C++ 的相关文章

随机推荐