我遇到了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
此错误是与线程创建有关还是与其他内容有关?我该怎么做才能解决它?
答案 0 :(得分:2)
由于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
成为静态成员函数或全局函数:
答案 1 :(得分:1)
首先,获取指向成员函数的指针的正确语法是
&classX::doWork
但是我觉得你可能没有显示产生错误的确切代码,因为VS中&doWork
的典型错误是
error C2276: '&' : illegal operation on bound member function expression