我有无法解决的boost::thread这个问题。

我有一个classX.h文件:

#include <boost/thread/thread.hpp>
class classX{

    ...
    void startWork(void);
    void doWork(void);
    ...

}

然后是.cpp文件:
...
void classX::startWork(){
boost::thread(&doWork);
}
void classX::doWork(){
...
}

我无法编译,我观察到错误(在执行boost::thread(&doWork)的那一行中):
error C2761: 'void plsa_mt_2::doWork(void)' : member function redeclaration not allowed

此错误与线程创建或其他有关吗?我该怎么解决?

最佳答案

由于classX::doWork()classX的成员函数,因此如果不提供指向(&classX::doWork)的指针,则无法调用成员函数指针classX

实现此目的的最快捷方式是使用Boost Bind通过成员函数指针和指向classX的指针创建可调用函子,如下所示:

void classX::startWork() {
boost::thread t(boost::bind(&classX::doWork, this)); // be careful, the boost::thread will be destroyed when this function returns
}

如果doWork()不需要访问doWork()的实例属性,则可以选择使classX为静态成员函数或全局函数:

10-06 13:19