用于创建线程并使用可变线程数连接的循环 我正在构建一个程序,为了测试的目的,可以在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::向量t; 对于(i=0;i

用于创建线程并使用可变线程数连接的循环 我正在构建一个程序,为了测试的目的,可以在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::向量t; 对于(i=0;i,c++,multithreading,loops,C++,Multithreading,Loops,我当前遇到一个错误,称调用“std::thread”的已删除构造函数。我不知道这意味着什么或如何解决 注: 我看过: 但我觉得他们没有回答我的问题。大多数线程使用pthread或其他构造函数。不能复制线程。你需要移动它们才能把它们放到向量中。此外,您不能在循环中创建临时副本来连接它们:您必须使用引用 这里有一个工作版本 std::vector<std::thread> t; for(int i=0; i < THREADS; i ++){ std::thr

我当前遇到一个错误,称调用“std::thread”的已删除构造函数。我不知道这意味着什么或如何解决

注:
我看过:


但我觉得他们没有回答我的问题。大多数线程使用pthread或其他构造函数。

不能复制线程。你需要移动它们才能把它们放到向量中。此外,您不能在循环中创建临时副本来连接它们:您必须使用引用

这里有一个工作版本

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();
}
std::vector t;
对于(int i=0;it、 push_back(std::move(th));//当询问生成错误时,首先尝试创建一个可以显示给我们的。然后复制粘贴(作为文本)将该示例中完整的构建日志放入问题正文。请在示例中标出错误所在的行,并附上示例注释。此外,请花一些时间查看,以及。提示:循环加入线程可能不应复制线程对象。错误消息不存在。std::thread用“线程(常量线程&)”定义=delete;'您无法复制它。如果是您,您将如何为线程编写复制构造函数?您能否在代码中识别副本并以某种方式修复它?提示:线程不可复制。这是错误的正确解释,但OP最好使用
emplace\u back
中的
t.emplace\u back([]{workThreadProcess();});
而不是创建一个
std::thread
对象来移动它