簡體   English   中英

我需要刪除自己創建的增強線程嗎?

[英]Do I need to delete a boost thread that I created?

我正在創建這樣的線程:

 MyThread = new boost::thread(&MyThreadFunction, this);

MyThreadFunction是:

void MyThreadFunction()
{
    for(int i=0;i<10000;i++)
    {
        Sleep(1000);
        boost::this_thread::interruption_point();
        cout<< "Test"<<i<<endl;
    }
}

如您所見,線程在一段時間后(或被中斷時)是魚。因此,當我需要運行MyThreadFunction時,我需要創建一個新線程。

我需要刪除線程嗎?

如何檢查線程是否仍在運行,所以在運行時無法刪除它?

您需要回答的第一個問題是“線程的生命周期是什么?”

線程的生命周期是否受到某些高級函數的約束? 如果是這樣,則需要確定加入子線程的策略。 加入線程后,您可以(並且必須)安全地刪除動態分配的線程。 如果不刪除線程,則將擁有與boost :: thread對象本身相關的所有常規內存丟失(而不是由於未加入基礎Posix / Windows / etc。線程而導致的資源丟失)

如果線程的生命周期不受高層函數的限制,則只需創建線程並對其調用detach。 此時,“ boost :: thread對象不再代表現在分離的線程”(請參閱​​參考資料),您可以安全地刪除boost :: thread對象。 無需跟蹤或保持boost :: thread指針。 底層OS線程資源將在程序終止時清理。

當然,在大多數情況下,一開始就不需要動態分配boost :: thread對象。 如果您需要控制生命周期並在以后加入它們,那么最好是擁有一個維護線程所有權並將其視為類成員的類。

請參閱: http : //www.boost.org/doc/libs/1_55_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.detach

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM