我有无法解决的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
为静态成员函数或全局函数: