1. 程式人生 > >Qt 筆記:執行緒的生命期問題

Qt 筆記:執行緒的生命期問題

C++物件有宣告週期;

執行緒也有宣告週期;

QThread物件的生命週期與對應的執行緒宣告週期是否一致?

執行緒物件生命週期  >  對應的執行緒宣告週期

  同步型執行緒設計

-概念

·執行緒物件主動等待執行緒生命期結束後才銷燬

-特點

·同時支援棧和堆中建立執行緒物件

·物件銷燬時確保執行緒生命期結束

-要點

·在解構函式中先呼叫wait()函式,強制等到執行緒執行結束

-使用場合

·執行緒生命期相對較短的情形

FuncThread::~FuncThread()
{
    wait();
    
    // do something to release resource

}

非同步型執行緒設計

-概念

·執行緒生命期結束時通知銷燬執行緒物件

-特點

·只能在堆中建立執行緒物件

·執行緒物件不能被外界主動銷燬

-要點

·在run() 中最後呼叫deleteLater() 函式

·執行緒體函式主動申請銷燬執行緒物件

-使用場合

·執行緒生命期不可控,需要長時間運行於後臺的情形

void FuncThread::run()
{

    for(int i = 0; i < 5;i++)
    {
        //do something complicated
    }

    //apply to destory thread object

    deleteLater();
}

總結:

執行緒物件生命期必須大於對應執行緒生命期

-同步型執行緒設計-->執行緒生命期較短

-非同步型執行緒設計-->執行緒生命期不可控

-執行緒類的設計必須適應具體的場合

-沒有萬能的設計,只有合適的設計

執行緒的生命期設計例項