在C++/Qt網路通訊模塊設計與實現(三)中提到了一個概念,即接受者所依附的線程;關註我微信公眾號的技術朋友留言對該概念還是不解,這節就單獨講述這個概念的理論與實際應用,這種應用無處不在,因為與Qt的信號槽、線程相關,大家需掌握。接下來從 Qt::ConnectionType,示例源碼,結果論證,歸 ...
在C++/Qt網路通訊模塊設計與實現(三)中提到了一個概念,即接受者所依附的線程;關註我微信公眾號的技術朋友留言對該概念還是不解,這節就單獨講述這個概念的理論與實際應用,這種應用無處不在,因為與Qt的信號槽、線程相關,大家需掌握。接下來從 Qt::ConnectionType,示例源碼,結果論證,歸納總結等四個方面進行全方面講解。
Qt::ConnectionType
[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Qt::ConnectionType是信號槽連接函數的第五個參數,有如下值
大家主要使用Qt::AutoConnection、Qt::DirectConnection、Qt::QueuedConnection三種值
自動連接(Qt::AutoConnection)
- 預設值
- 發射信號的線程與接受者所依附的線程為同一個線程,則等同於直接連接,否則等同於隊列連接
直接連接(Qt::DirectConnection)
- 槽函數會在信號發送時直接被調用(類似函數直接調用)
- 槽函數在發送信號的線程里執行
隊列連接(Qt::QueuedConnection)
- 當控制權回到接受者所依附線程的事件迴圈時,槽函數被調用
- 槽函數在接收者所依附線程執行
示例源碼
- 兩個線程,即主線程與ResponseThread線程
- 在主線程里觸發信號
- 驗證槽函數在哪個線程里執行
- 加深理解所依附的線程的概念
備註::下述代碼可以直接編譯運行。
詳細講解請點擊C++/Qt網路通訊模塊設計與實現(四)