我有一个维护工作线程的类。当我传递它们并从数组中添加/删除时,它需要是可构造的,例如:
for (...) {
Foo foo;
foos.push_back(std::move(foo));
}
类设置如下所示:
Foo::Foo() : worker(), working(true) {
worker = std::thread(&Foo::work, this);
}
Foo::Foo(Foo &&foo) {
working = true;
worker = std::move(foo.worker);
}
Foo::~Foo() {
if (worker.joinable()) {
working = false;
worker.join();
}
}
void Foo::work() {
while(working) {
std::cout << "working..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
问题是移动Foo
后,其工作线程退出。我发现它是因为working
现在看到worker
为false
。
如何让worker
线程查看新(移动到)父Foo
对象的实例变量?这可能吗?我的移动构造函数完全错了吗?