2010-08-27 107 views
2

我的代碼的簡化版本,如下所示:升壓螺紋

class threadCreator 
{ 
    void threadFunction(void){ 
    // use some private data members and do something. 
    } 
    void createThread(void){ 
     boost::thread myThread(
       boost::bind(&threadCreator::threadFunction,this)); 
     myThread.detach(); 
    } 
} 

此程序等待線程完成執行,然後退出,即使我在線程中調用分離方法。如果我刪除這個類,並在一個函數中創建我的線程,這似乎按預期工作。

我認爲它與仍在記憶中的對象有關。不過,我是C++學習者,不確定如何解決這個問題。

+0

你目睹一些RAII的可能性最大。 當您的函數在分配到堆棧上的對象上完成時,會調用隱含的析構函數。 也,線程析構函數調用分離以及,所以我不知道調用兩個分離函數的效果是什麼。嘗試使用new來分配你的線程 – Anycorn 2010-08-27 04:18:26

回答

2

我認爲你錯過了一些東西,因爲程序要等待線程執行結束,你應該在這個線程對象的某個地方有一個.join()。默認行爲不是等待線程執行的結束。

沒有必要調用線程上的.detach(),線程將從範圍末尾的對象線程中分離出來。