在受保护的方法中增强线程函数

时间:2013-03-06 15:39:49

标签: c++ class boost

我是C ++的新手,并且如果你能指出可能出现什么问题,我将不胜感激。我试图使用一个调用函数的boost线程。我编辑了工作代码来介绍线程。

in .h我有

class Base: public test 
{
 public:
    Base(string Name, string test);

    virtual ~Base();


    Base &operator=(const Base &other);

    Base(const Base &other);
 protected:
    virtual void Run();
 private:
    void RunBasic();
    void workerFunc();
 }

在我的.cpp文件中

void Base::Run() 
{
  boost::thread workerThread(workerFunc);
  RunBasic();
  workerThread.join();
}

void Base::workerFunc()
{
  #pretending to do some work
  #some functionality here
}

void Base::RunBasic() 
{
 #more stuff here
}

我收到编译错误error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’

2 个答案:

答案 0 :(得分:0)

因为workerFunc是一个成员函数,所以你必须将它绑定到线程。

boost::thread workerThread(&Base::workerFunc, this);

答案 1 :(得分:0)

错误的原因是要取成员函数的地址,你需要说&Base::workerFunc

修复后,你会得到另一个错误,即没有对象就无法调用非静态成员函数,所以你需要将一个对象(或指向一个对象的指针)传递给{{ 1}}构造函数:

thread

这告诉boost::thread workerThread(&Base::workerFunc, this); 对象创建一个新线程,然后运行thread,这样就可以了。

如果函数有参数,你可以在this->workerFunc()参数后传递它们:

this