18
如果我有一類A,其中其功能之一的作用:Qt:事件是否按順序處理?
void A::func()
{
emit first_signal();
emit second_signal();
}
假設B類有2個插槽,一個連接到first_signal
,另一個到second_signal
,是它保證,所述插槽連接到first_signal
將始終處理之前插槽second_signal
?
我認爲,只要它們具有相同的類型,即使它不是默認值,也會得到保證。排隊的人會創建兩個事件,每個事件具有相同的優先級,然後按順序處理這些事件。此外,默認的連接類型是Qt :: AutoConnection,只要發射器和接收器都在同一個線程中,就可以解析爲直接連接。 – 2009-11-14 14:03:49
你的帖子的開始句應該是'如果你在信號和插槽之間使用DIRECT連接類型;因爲默認類型是'Qt :: AutoConnection',它的行爲有所不同,取決於發送代碼和接收對象是否存在於不同的線程中。參見['Qt :: ConnectionType'文檔](http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum)和[Threads,Events and QObjects](http:// qt- project.org/wiki/Threads_Events_QObjects)。 – Hossein 2013-05-10 07:01:17
如果您選擇Qt :: QueuedConnection(或Qt :: AutoConnection,並且該插槽與信號處於不同的線程中),當然該插槽將被異步調用,但我認爲問題依然存在:「是否保證插槽連接到first_signal的數據將始終在second_signal插槽之前處理?「任何人都有答案? – 2016-01-15 10:45:23