我有一个类,它需要在类本身被实例化后立即实例化一个后台任务,该任务在对象的生命周期内运行。这是代码:
// Foo.cpp
#include <boost/thread.hpp>
// Constructor
Foo::Foo() {
boost::thread thread(&Foo::bar, this)
// do other stuff
}
// Background method
void Foo::bar() const {
// do some background stuff forever, sleep, etc
}
但是一旦类被调用,程序就会立即终止——它说aborted
。 IE。我有一个简单的 main()
函数,它只创建一个简单的对象并返回 0,int main { Foo f;返回 0;
做什么?
最佳答案
这里的问题是 boost::thread
对象在构造函数的函数 block 末尾被破坏。如果您希望线程对象在 Foo
对象的生命周期内存在,只需使线程成为 Foo
类的成员并在构造函数中构造该成员:
class Foo {
boost::thread theThread;
Foo();
~Foo();
void bar() const;
// other stuff
};
Foo::Foo()
: theThread(&Foo::bar, this)
{
// do other stuff
}
Foo::~Foo() {
theThread.join();
}
关于C++从类的构造函数运行boost线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781710/