一个类中的boost :: thread

时间:2011-11-28 03:31:40

标签: c++ boost-thread

我正在尝试创建一个类,在创建时启动一个后台线程,类似于下面的内容:

class Test
{
  boost::thread thread_;
  void Process()
  {
    ...
  }

  public:
    Test()
    {
       thread_ = boost::thread(Process);
    }
}

我无法编译,错误是“没有匹配函数来调用boost :: thread :: thread(未解析的函数类型)”。当我在课外做这件事时,它运作正常。如何让函数指针起作用?

3 个答案:

答案 0 :(得分:6)

您应该将thread_初始化为:

Test()
  : thread_( <initialization here, see below> )
{
}

Process是类Test的成员非静态方法。你可以:

  • Process声明为静态。
  • 绑定一个Test实例,以便调用Process

如果您将Process声明为静态,则初始值设定项应为

&Test::Process

否则,您可以使用Boost.Bind绑定Test的实例:

boost::bind(&Test::Process, this)

答案 1 :(得分:4)

问题是你想用指向成员函数的指针初始化boost :: thread。

你需要:

Test()
    :thread_(boost::bind(&Test::Process, this));
{

}

question也可能非常有用。

答案 2 :(得分:0)

使您的Process方法保持静态:

  static void Process()
  {
   ...
  }