是否可以从另一个成员函数的非静态成员函数启动boost线程

时间:2011-07-09 16:04:43

标签: multithreading boost bind

就像你可能知道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));

1 个答案:

答案 0 :(得分:1)

...是

void infiniteRun()
{
    boost::thread thr(boost::bind(&sayHello::repeatHello,this));
}

尽管这样做充满了内存泄漏和访问违规的危险。在处理线程时,我强烈建议使用智能指针来保持正常运行。