【问题标题】:How to stop/interrupt a boost::thread?如何停止/中断 boost::thread?
【发布时间】:2012-05-10 10:09:04
【问题描述】:

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

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

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


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

但它不起作用。我怎样才能停止线程?

【问题讨论】:

    标签: c++ multithreading boost


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 非常好的文章,帮了大忙。谢谢~
      • 您还应该使用智能指针来确保 boost::thread 被删除。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多