我正在尝试创建一个类,在创建时启动一个后台线程,类似于下面的内容:
class Test
{
boost::thread thread_;
void Process()
{
...
}
public:
Test()
{
thread_ = boost::thread(Process);
}
}
我无法编译,错误是“没有匹配函数来调用boost :: thread :: thread(未解析的函数类型)”。当我在课外做这件事时,它运作正常。如何让函数指针起作用?
答案 0 :(得分:6)
您应该将thread_
初始化为:
Test()
: thread_( <initialization here, see below> )
{
}
Process
是类Test
的成员非静态方法。你可以:
Process
声明为静态。Process
。如果您将Process
声明为静态,则初始值设定项应为
&Test::Process
否则,您可以使用Boost.Bind绑定Test
的实例:
boost::bind(&Test::Process, this)
答案 1 :(得分:4)
问题是你想用指向成员函数的指针初始化boost :: thread。
你需要:
Test()
:thread_(boost::bind(&Test::Process, this));
{
}
此question也可能非常有用。
答案 2 :(得分:0)
使您的Process方法保持静态:
static void Process()
{
...
}