Giz*_*zmo 1 c++ c++11 stdthread
我想在某个类的成员变量中保留一个线程。以下代码段显示了我想要实现的目标:
#include <iostream>
#include <thread>
#include <vector>
class Test {
public:
std::thread& t;
Test(std::thread&& rt) : t(rt) {}
};
int main()
{
std::vector<Test> tests;
{
std::thread t ([]{
std::cout << 1;
});
tests.push_back(Test(std::move(t)));
}
for(Test mytest : tests)
{
mytest.t.join();
}
}
Run Code Online (Sandbox Code Playgroud)
该代码将在join()行处中断。错误是:
terminate called without an active exception
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
保留原始线程创建的范围后,为什么不能通过mytest.t调用线程?
由于std :: thread是可移动的但不可复制,因此您可以这样做:
class Test {
public:
std::thread t;
Test(std::thread&& rt) : t(std::move(rt)) {}
};
int main()
{
std::vector<Test> tests;
{
std::thread t([] {
std::cout << 1;
});
tests.push_back(Test(std::move(t)));
}
for (Test& mytest : tests)
{
mytest.t.join();
}
}
Run Code Online (Sandbox Code Playgroud)