22
假設我有一個連接到插槽通知的信號變化。如果發出變化信號,通知槽將開始執行。Qt信號和插槽線程安全
現在如果發出第二個更改信號並且第一個通知槽沒有完成其執行,會發生什麼情況?
第一個插槽是否與第一個插槽同時啓動?如果是這樣,Qt是處理線程安全還是由程序員來處理?
假設我有一個連接到插槽通知的信號變化。如果發出變化信號,通知槽將開始執行。Qt信號和插槽線程安全
現在如果發出第二個更改信號並且第一個通知槽沒有完成其執行,會發生什麼情況?
第一個插槽是否與第一個插槽同時啓動?如果是這樣,Qt是處理線程安全還是由程序員來處理?
它取決於您通過調用connect
函數指定的連接類型。如果您指定Qt::DirectConnection
AND以不同於插槽線程的線程發送信號,則插槽同時啓動的唯一方法是。如果你省略連接類型,它將是Qt::AutoConnection
。在這種情況下,如果您從一個線程發出信號並將其捕獲到另一個線程中(例如在主GUI線程中) - Qt會將一個槽的調用放入消息隊列,並將按順序進行所有調用。請閱讀此處瞭解更多信息 - http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads