Search code examples
c++boost-thread

boost::thread within a class


I'm trying to have a class that when created, starts a background thread, similar to that below:

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

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

I can't get it to compile, the error is "No matching function for call to boost::thread::thread(unresolved function type)". When I do this outside of a class it works fine. How can I get the function pointer to work?


Solution

  • You should initialize thread_ as:

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

    Process is a member non-static method of class Test. You can either:

    • declare Process as static.
    • bind a Test instance to call Process on.

    If you declare Process as static, the initializer should just be

    &Test::Process
    

    Otherwise, you can bind an instance of Test using Boost.Bind:

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