Qt原理分析 四 訊號與槽的連線方式

2021-10-01 01:40:40 字數 2245 閱讀 6897

我們檢視文件時,發現connect函式還有第五個引數。那麼這個引數的作用是什麼呢?我們之前使用的是預設值,具體的功能是什麼呢?

每乙個執行緒都有自己的事件佇列

執行緒通過事件佇列接收訊號

訊號在事件迴圈中被處理

示例**:訊號與槽的連線方式

class myobject : public qobject

;void myobject:

:testslot()

class testthread : public qthread

;void testthread:

:run()

emit testsignal()

;exec()

;qdebug()

<<

"void testthread::run() -- end"

;}

直接在傳送訊號的執行緒中呼叫槽函式,等價於槽函式的實時呼叫!

示例**:訊號與槽的直接呼叫

void

direct_connection()

intmain

(int argc,

char

*ar**)

輸出結果:

main() tid = 0x2ff4

void testthread::run() – begin tid = 0x1d98

void testthread::run() i = 0

void testthread::run() i = 1

void testthread::run() i = 2

void myobject::testslot() tid = 0x1d98

void testthread::run() – end

我們可以發現,當執行緒傳送訊號時,便立即呼叫了槽函式。接著才退出執行緒。

訊號傳送至目標執行緒的事件佇列,由目標執行緒處理;當前執行緒繼續向下執行

示例**:訊號與槽的非同步呼叫

void

queued_connection()

intmain

(int argc,

char

*ar**)

輸出結果:

main() tid = 0x1fbc

void testthread::run() – begin tid = 0x32f0

void testthread::run() i = 0

void testthread::run() i = 1

void testthread::run() i = 2

void testthread::run() – end

void myobject::testslot() tid = 0x1fbc

我們可以發現,當傳送訊號後,需要等待執行緒結束後再執行相應的槽函式。

訊號傳送至目標執行緒的事件佇列,由目標執行緒處理;當前執行緒等待槽函式返回,之後繼續向下執行!

注意:目標執行緒與當前執行緒必須不同

示例**:訊號與槽的同步呼叫

void

blocking_queued_connection()

intmain

(int argc,

char

*ar**)

輸出結果:

main() tid = 0x2554

void testthread::run() – begin tid = 0x130

void testthread::run() i = 0

void testthread::run() i = 1

void testthread::run() i = 2

void myobject::testslot() tid = 0x2554

void testthread::run() – end

[外鏈轉存失敗(img-c3e2hdf9-1563242662208)(/home/shangrongo

描述

小知識

Qt訊號與槽連線

connect pointer1,pointer2,pointer3,pointer4 pointer1 指向傳送訊號的物件的指標 pointer2 傳送訊號的物件所對應的類的成員函式的指標 pointer3 接收訊號的物件的指標 pointer4 接收訊號的物件所對應物件的槽函式指標 總結下來就是...

QT訊號與槽的連線方式

一.qt autoconnection qt autoconnection表示系統自動選擇相應的連線方式,如果訊號與槽在同一執行緒,就採用qt directconnection,如果訊號與槽不在同一執行緒,將採用qt queuedconnection的連線方式。二.qt directconnecti...

Qt原理分析 五 Qt中訊號與槽的對應關係

到目前為止,我們已經可以吧訊號與槽連線在一起了。但我們還需要考慮一些其他的可能性。例如下圖所示 如signal5連線了slot2和slot3。void one to multi 輸出結果 one to multi void myslot int v sender t receiver r1 valu...