2013-03-06 33 views
0

我是C++的新手,如果能指出可能存在的问题,将不胜感激。我正在尝试使用调用函数的boost线程。我编辑了工作代码来介绍线程。在受保护的方法内提升线程功能

在.H我在.cpp文件中有

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(); 
} 

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>)’

回答

0

错误的原因是一旦你解决,你会得到另一个错误,这是把你需要说&Base::workerFunc

成员函数的地址是一个非静态成员功能不能被称为没有对象,所以你需要传递一个对象(或对象指针)到thread构造:

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

这就告诉thread对象来创建一个新的线程,然后RU所以现在应该工作。

如果函数有参数,这在this参数后,通过他们:

boost::thread workerThread(&Base::workerFunc, this, arg1, arg2); 
+0

非常感谢你们。 – user2137735 2013-03-06 18:02:08

0

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

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

不,'的boost :: thread'实现_INVOKE_协议,所以'bind'是多余的,只是'的boost ::线程workerThread(&Base :: workerFunc,this)' – 2013-03-06 15:48:47

+0

@JonathanWakely我没有意识到这一点,我编辑了我的答案。 – 2013-03-06 15:50:07