C++ 如何分别创建和启动线程
我想做的是创建一些线程,并将它们推送到向量中,以便在一些检查之后启动它们 所以在这里,我主要想创建如下主题C++ 如何分别创建和启动线程,c++,multithreading,C++,Multithreading,我想做的是创建一些线程,并将它们推送到向量中,以便在一些检查之后启动它们 所以在这里,我主要想创建如下主题 int main() { Pont pont; for (int k = 0; k <= 20; k++) { std::thread th(crossBridge); pont.threadsW.push_back(std::move(th)); } pont.init(); return 0; } i
int main()
{
Pont pont;
for (int k = 0; k <= 20; k++) {
std::thread th(crossBridge);
pont.threadsW.push_back(std::move(th));
}
pont.init();
return 0;
}
intmain()
{
庞特庞特;
对于(int k=0;k,可以使用默认构造的(空)线程对象填充向量
for (int k = 0; k<=20; k++)
pont.threadsW.push_back({}); // populate vector with empty thread objects
您并没有真正创建线程并将其推迟到启动。相反,向量将填充空线程对象。一旦将新线程移动到向量线程对象中,实际线程将被创建并开始运行
for (auto& th : pont.threadsW)
th.join();
完成后,对每个线程对象调用join()
for (auto& th : pont.threadsW)
th.join();
如果在执行启动前检查时,线程函数需要处于运行状态,则在每个线程等待清除信号后才能继续运行时,需要进行额外的同步。您知道如何在不使用for循环的情况下启动线程,而使用for循环吗example@lyes这与for循环非常相似e> int k=10;while(k-->0)v.push_back({});
类似于join,int k=v.size();while(-k>0)v[k].join();
后者可能是危险的,因为v.size()
返回一个无符号类型。。for循环就是这里的方法。谢谢你的回答,但我正在谈论如何为`编写这段代码(auto&th:pont.threadsW)th=thread(crossBridge);`using while loop.@lyes您正在为while loops寻找一个基于范围的等价物。。它不存在
for (auto& th : pont.threadsW)
th.join();