如何停止/中断boost :: thread?

时间:2012-05-10 10:09:04

标签: c++ multithreading boost

我在一个函数中创建一个线程,而在另一个函数中,我想要停止这个线程。 我试过这样的:

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

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


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

但这不起作用。我怎么能阻止这个帖子?

2 个答案:

答案 0 :(得分:22)

如果你想使用interrupt(),你应该定义interruption points。一旦到达其中一个中断点,线程将在调用interrupt()后中断。

答案 1 :(得分:18)

首先,在createNewThread()中,您在本地范围内声明boost::thread t并将其指针指定给类成员mPtrThreadcreateNewThread()完成后,t将被销毁,而mPtrThread将保留非法指针。

我宁愿使用像mPtrThread = new boost::thread(...);

这样的东西

您可能还想阅读this article以了解有关Boost中多线程的更多信息。