2012-05-10 59 views
10

我在一個函數中創建一個線程,而在另一個函數中,我想停止這個線程。 我已經試過這樣:如何停止/中斷boost :: thread?

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

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


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

但它不是我work.How可以停止線程?

回答

20

如果你想使用中斷(),你應該定義interruption points。線程在到達其中一箇中斷點後立即調用interrupt()後將被中斷。

+0

非常感謝! – wtm

17

首先,在createNewThread()聲明在當地範圍boost::thread t和它的指針分配給類成員mPtrThread。在createNewThread()完成之後,t被銷燬,並且mPtrThread將持有非法指針。

我寧願使用mPtrThread = new boost::thread(...)之類的東西;

您可能還想讀this article以瞭解更多關於Boost多線程的信息。

+1

真的很好的文章,幫助很多。謝謝〜 – wtm

+0

你還應該使用智能指針來確保boost :: thread被刪除。 – allyourcode