C++从类的构造函数运行boost线程

标签 c++ multithreading boost

我有一个类,它需要在类本身被实例化后立即实例化一个后台任务,该任务在对象的生命周期内运行。这是代码:

// 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/

相关文章:

c++ - 处理 IDispatch 参数和 COM

c++ - 在并发环境中访问 MMIO 的软件模式

c++ - Windows XP 上的 GDI+ 问题

objective-c - 此 View 动画概念的正确干净且线程安全的设计

c++ - Hana BOOST_HANA_DEFINE_STRUCT 不适用于 std::unique_ptr

c++ - 使用 Nuget 在 Visual Studio 2019 中安装 Boost v1.70

c# - p/invoke 操作以执行另一个函数结束

java - 使用 5 个线程添加数字

java - Java 中使用 System.out.println 的多线程

c++ - 定义一个符号,它可能是 boost spirit 中文字函数的一部分