Ответ 1
Если вы хотите использовать прерывание(), вы должны определить точки прерывания. Поток будет прерван после вызова прерывания(), как только он достигнет одной из точек прерывания.
Я создаю поток в функции, и в другой функции я хочу остановить этот поток. Я пробовал вот так:
class Server
{
private:
boost::thread* mPtrThread;
...
public:
void createNewThread()
{
boost::thread t(...);
mPtrThread = &t;
}
void stopThread()
{
mPtrThread->interrupt();
}
}
Но это не работает. Как я могу остановить поток?
Если вы хотите использовать прерывание(), вы должны определить точки прерывания. Поток будет прерван после вызова прерывания(), как только он достигнет одной из точек прерывания.
Прежде всего, в createNewThread()
вы объявляете boost::thread t
в локальной области и присваиваете свой указатель члену класса mPtrThread
. После завершения createNewThread()
, t
уничтожается, а mPtrThread будет содержать недопустимый указатель.
Я бы предпочел использовать что-то вроде mPtrThread = new boost::thread(...)
;
Вы также можете прочитать эту статью, чтобы узнать больше о многопоточности в Boost.