qt 信號與槽函數連接connect 參數在單線程與多線程中的選擇


Qt:: AutoConnection:
默認如果接收器在發出信號的線程中, 將使用Qt::Directconnection。否則, 將使用Qt::QueuedConnection。注意:連接類型是在發出信號時確定的。
Qt::Directconnection:
發出信號時, 會立即調用槽函數。槽函數運行在信號發送的線程中執行。
單線程:1.其實這種方式發送的信號、就是與直接調用槽函數沒有區別的。
多線程:2.其實也起不到多線程的作用、因爲線程會阻塞、可能會造成一定的崩潰。
Qt:: QueuedConnection:
這種方式是隊列的方式實現的,當控制返回到接收方線程的事件循環時, 將調用該槽函數。槽函數在接收器的線程中執行。
單線程:1.可能會卡死。
多線程:2.多線程環境下一般用這個。
Qt:: BlockingQueuedConnection:
與 Qt 相同:: QueuedConnection, 除非信號線程阻塞, 直到槽函數返回。同步調用。
單線程:1.如果接收器住在發送信號線程中, 則不能使用此連接, 否則應用程序將死鎖。
多線程:2.接收者和發送者絕對不能在一個線程,否則程序會死鎖。在多線程間需要同步的場合可能需要這個。
Qt:: UniqueConnection:
這是一個可以使用按位或的方式與上述任何一種連接類型組合的標誌。當 Qt::UniqueConnection 設置, QObject::connect()將返回失敗, 如果連接已經存在 (即如果相同的信號已經連接到同一槽函數的同一對對象)。
可以做到避免重複連接;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章