10

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

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

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


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

但这不起作用。我怎么能停止线程?

4

2 回答 2

22

如果你想使用 interrupt() 你应该定义中断点。线程一旦到达中断点之一,就会在调用interrupt()后被中断。

于 2012-05-10T10:27:55.583 回答
18

首先,在本地范围createNewThread()内声明 a并将其指针分配给类成员。完成后,被销毁并且 mPtrThread 将持有一个非法指针。boost::thread tmPtrThreadcreateNewThread()t

我宁愿使用类似的东西mPtrThread = new boost::thread(...);

您可能还想阅读这篇文章以了解有关 Boost 中的多线程的更多信息。

于 2012-05-10T10:22:42.663 回答