就像你可能知道boost线程要求作为参数fwd的memeber函数必须是静态的。如果它不是静态的,有一种绑定方式可以做到,但我更喜欢Object o; o.startThread()比 对象o; boost :: thread(boost :: bind ....)因为它将线程代码保存在类中(也是异常处理)。 因此,例如可以将其重写为工作:
class sayHello
{
string name;
public:
sayHello(string name_):name(name_)
{
}
void repeatHello()
{
while (true)
{
boost::this_thread::sleep(posix_time::seconds(3));
cout<<"Hello "<<name<<endl;
}
}
void infiniteRun()
{
boost::thread thr(repeatHello);//broken line
}
};
P.S。对于那些流浪的人来说,什么是“绑定方式”AFAIK就是这样:
sayHello sh("world");
boost::thread thr(boost::bind(&sayHello::repeatHello,&sh));
答案 0 :(得分:1)
...是
void infiniteRun()
{
boost::thread thr(boost::bind(&sayHello::repeatHello,this));
}
尽管这样做充满了内存泄漏和访问违规的危险。在处理线程时,我强烈建议使用智能指针来保持正常运行。