Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 600
Matthew Finlay Avatar asked Nov 28 '11 03:11

Matthew Finlay


2 Answers

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)
like image 88
Pablo Avatar answered Sep 29 '22 23:09

Pablo


The problem is that you want to initialize boost::thread with a pointer to a member function.

You would need:

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

}

Also this question may be very helpful.

like image 44
Roman Byshko Avatar answered Sep 30 '22 00:09

Roman Byshko