Qt 訊號 槽的同步與非同步處理

2021-08-07 19:36:15 字數 915 閱讀 7458

通常使用的connect,實際上最後乙個引數使用的是qt::autoconnection型別:qt支援6種連線方式,其中3中最主要:

1.qt::directconnection(直連方式)(訊號與槽函式關係類似於函式呼叫,同步執行)

當訊號發出後,相應的槽函式將立即被呼叫。emit語句後的**將在所有槽函式執行完畢後被執行。

2.qt::queuedconnection(排隊方式)(此時訊號被塞到訊號佇列裡了,訊號與槽函式關係類似於訊息通訊,非同步執行)

當訊號發出後,排隊到訊號佇列中,需等到接收物件所屬執行緒的事件迴圈取得控制權時才取得該訊號,呼叫相應的槽函式。emit語句後的**將在發出訊號後立即被執行,無需等待槽函式執行完畢。

3.qt::autoconnection(自動方式)

qt的預設連線方式,如果訊號的發出和接收這個訊號的物件同屬乙個執行緒,那個工作方式與直連方式相同;否則工作方式與排隊方式相同。

4.qt::blockingqueuedconnection(訊號和槽必須在不同的執行緒中,否則就產生死鎖)

這個是完全同步佇列只有槽執行緒執行完成才會返回,否則傳送執行緒也會一直等待,相當於是不同的執行緒可以同步起來執行。

5.qt::uniqueconnection

與預設工作方式相同,只是不能重複連線相同的訊號和槽,因為如果重複連線就會導致乙個訊號發出,對應槽函式就會執行多次。

6.qt::autocompatconnection

是為了連線qt4與qt3的訊號槽機制相容方式,工作方式與qt::autoconnection一樣。

如果這個引數不設定的話,預設表示的是那種方式呢?

沒加的話與直連方式相同:當訊號發出後,相應的槽函式將立即被呼叫。emit語句後的**將在所有槽函式執行完畢後被執行。在這個執行緒內是順序執行、同步的,但是與其它執行緒之間肯定是非同步的了。如果使用多執行緒,仍然需要手動同步。

Qt 訊號 槽的同步與非同步處理

通常使用的connect,實際上最後乙個引數使用的是qt autoconnection型別 qt支援6種連線方式,其中3中最主要 1.qt directconnection 直連方式 訊號與槽函式關係類似於函式呼叫,同步執行 當訊號發出後,相應的槽函式將立即被呼叫。emit語句後的 將在所有槽函式執...

qt 槽與訊號

槽就是乙個可以被呼叫處理特定訊號的函式 乙個小的qt類如下 class foo public qobject public slots void setvalue int signals void valuechanged int private int val qt中的元物件系統是用來處理物件間通...

QT訊號與槽

初學qt,覺得理解qt訊號與槽比較重要,qt很多時候都需要用到訊號和槽。發射訊號會觸發相對應的槽函式的執行。乙個訊號可以對應多個槽,多個訊號可以對應乙個槽。訊號和槽是通過connect這個方法進行建立聯絡的。qt中有些類會自帶有一些訊號和槽函式,當然訊號和槽函式也可以自己定義。下面來看下很簡單的 會...