Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何分别创建和启动线程_C++_Multithreading - Fatal编程技术网

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