Qt 筆記:執行緒的生命期問題
阿新 • • 發佈:2018-11-10
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(); }
總結:
執行緒物件生命期必須大於對應執行緒生命期
-同步型執行緒設計-->執行緒生命期較短
-非同步型執行緒設計-->執行緒生命期不可控
-執行緒類的設計必須適應具體的場合
-沒有萬能的設計,只有合適的設計