我正在构建一个程序,出于测试目的,该程序可以在C ++中创建N个线程。 我是C ++的相对新手,到目前为止,我目前的尝试是
//Create a list of threads
std::vector<std::thread> t;
for(i=0; i < THREADS; i ++){
std::thread th = std::thread([](){ workThreadProcess(); });
t.push_back(th);
printf("Thread started \n");
}
for(std::thread th : t){
th.join();
}
我当前出现一个错误,提示调用已删除的'std :: thread'构造函数。我很清楚这意味着什么或如何解决
注意:
我看过:
但是我不觉得他们回答了我的问题。他们大多数使用pthreads或其他构造函数。
答案 0 :(得分:3)
您不能复制线程。您需要移动它们才能使其进入向量。同样,您不能在循环中创建临时副本以将其加入:您必须使用引用。
这是工作版本
std::vector<std::thread> t;
for(int i=0; i < THREADS; i ++){
std::thread th = std::thread([](){ workThreadProcess(); });
t.push_back(std::move(th)); //<=== move (after, th doesn't hold it anymore
std::cout<<"Thread started"<<std::endl;
}
for(auto& th : t){ //<=== range-based for uses & reference
th.join();
}