我是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>)’
答案 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