【问题标题】:boost::thread within a class类中的 boost::thread
【发布时间】:2011-11-28 03:31:40
【问题描述】:

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

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

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

我无法编译,错误是“No matching function for call to boost::thread::thread(unresolved function type)”。当我在课堂外这样做时,它工作正常。如何让函数指针工作?

【问题讨论】:

    标签: c++ boost-thread


    【解决方案1】:

    您应该将thread_ 初始化为:

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

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

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

    如果您将Process 声明为静态,则初始化程序应该只是

    &Test::Process
    

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

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

    【讨论】:

      【解决方案2】:

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

      你需要:

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

      另外这个question 可能会很有帮助。

      【讨论】:

        【解决方案3】:

        使您的 Process 方法静态:

          static void Process()
          {
           ...
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-21
          • 2023-03-07
          • 1970-01-01
          • 2012-03-23
          • 2011-01-11
          • 2010-11-06
          • 1970-01-01
          • 2015-02-07
          相关资源
          最近更新 更多