Можно ли запустить поток повышения на нестатической функции-члена из другой функции члена - PullRequest
0 голосов
/ 09 июля 2011

, как вы, вероятно, знаете, для Boost Thread требуется, чтобы функция memeber, являющаяся аргументом fwd, была статической.Есть обязательный способ сделать это, если он не статичен, но я предпочитаю Объект o;o.startThread () чем Object 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
    }
};

PS для людей, блуждающих, что такое «путь связывания» AFAIK это это:

sayHello sh("world");
boost::thread thr(boost::bind(&sayHello::repeatHello,&sh));

1 Ответ

1 голос
/ 09 июля 2011

Да ...

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

Хотя такое действие чревато опасностью утечек памяти и нарушений доступа.При работе с потоками я настоятельно рекомендую использовать умные указатели, чтобы правильно поддерживать жизнь.

...