Как остановить/прервать boost:: thread?

Я создаю поток в функции, и в другой функции я хочу остановить этот поток. Я пробовал вот так:

class Server
{
private:
     boost::thread* mPtrThread;
...

public:
     void createNewThread()
     {
        boost::thread t(...);
        mPtrThread = &t;
     }


     void stopThread()
     {
        mPtrThread->interrupt();
     }
}

Но это не работает. Как я могу остановить поток?

Ответ 1

Если вы хотите использовать прерывание(), вы должны определить точки прерывания. Поток будет прерван после вызова прерывания(), как только он достигнет одной из точек прерывания.

Ответ 2

Прежде всего, в createNewThread() вы объявляете boost::thread t в локальной области и присваиваете свой указатель члену класса mPtrThread. После завершения createNewThread(), t уничтожается, а mPtrThread будет содержать недопустимый указатель.

Я бы предпочел использовать что-то вроде mPtrThread = new boost::thread(...);

Вы также можете прочитать эту статью, чтобы узнать больше о многопоточности в Boost.