我只是想创建一个std::vector
个线程并运行它们。
代码:
thread t1(calc, 95648, "t1");
thread t2(calc, 54787, "t2");
thread t3(calc, 42018, "t3");
thread t4(calc, 75895, "t4");
thread t5(calc, 81548, "t5");
vector<thread> threads { t1, t2, t3, t4, t5 };
错误:&#34;函数std :: thread :: thread(const std :: thread&amp;)&#34; (在&#34的第70行声明; C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ thread&#34;)无法引用 - 它是已删除的函数
thread(const thread&) = delete;
什么似乎是问题?
答案 0 :(得分:5)
由于线程不可复制但可移动,我建议使用以下方法:
std::vector<std::thread> threads;
threads.emplace_back(calc, 95648, "t1");
threads.emplace_back(calc, 54787, "t2");
threads.emplace_back(calc, 42018, "t3");
threads.emplace_back(calc, 75895, "t4");
threads.emplace_back(calc, 81548, "t5");
答案 1 :(得分:3)
您可以使用:
vector<thread> threads
{
std::move(t1),
std::move(t2),
std::move(t3),
std::move(t4),
std::move(t5)
};
答案 2 :(得分:0)
禁止复制thread
个对象。允许移动。但您可以使用shared_ptr
来解决此问题。
我最喜欢使用线程向量的方法是通过共享指针。
std::vector<std::shared_ptr<std::thread>> threads;
以这种方式使用它们总是可以灵活地扩展向量(向量用于可扩展)。
threads.push_back(std::shared_ptr<std::thread>(new std::thread(&some_fn)));
对于您的代码,这将是:
using namespace std;
shared_ptr<thread> t1 = make_shared<thread>(calc, 95648, "t1");
shared_ptr<thread> t2 = make_shared<thread>(calc, 54787, "t2");
shared_ptr<thread> t3 = make_shared<thread>(calc, 42018, "t3");
shared_ptr<thread> t4 = make_shared<thread>(calc, 75895, "t4");
shared_ptr<thread> t5 = make_shared<thread>(calc, 81548, "t5");
vector<shared_ptr<thread>> threads { t1, t2, t3, t4, t5 };