Wenn ich eine Klasse A hatte, wo eine seiner Funktionen hat:Qt: Werden Ereignisse in Reihenfolge verarbeitet?
void A::func()
{
emit first_signal();
emit second_signal();
}
Unter der Annahme, dass eine Klasse B 2 Schlitze hat, einen mit first_signal
, und die andere an second_signal
wird gewährleistet, dass die Steckplatz, der mit first_signal
verbunden ist, wird immer vor der second_signal
Steckplatz verarbeitet?
Ich denke, dass es garantiert wäre, solange sie den gleichen Typ haben, auch wenn es nicht Standard ist. Die Warteschlange würde zwei Ereignisse mit jeweils derselben Priorität erstellen, und diese Ereignisse würden dann in der Reihenfolge verarbeitet. Außerdem lautet der Standardverbindungstyp Qt :: AutoConnection, der so lange aufgelöst wird, wie Sender und Empfänger sich im selben Thread befinden. –
Der Anfangssatz Ihres Beitrags sollte 'Wenn Sie den DIREKT-Verbindungstyp zwischen Signalen und Steckplätzen verwenden '; da der Standardtyp 'Qt :: AutoConnection' ist, der sich unterschiedlich verhält, abhängig davon, ob der sendende Code und das empfangende Objekt in verschiedenen Threads leben oder nicht. Siehe ['Qt :: ConnectionType'-Dokumente] (http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum) und [Threads, Events und QObjects] (http: // qt- project.org/wiki/Threads_Events_QObjects). – Hossein
Wenn Sie Qt :: QueuedConnection (oder Qt :: AutoConnection und der Steckplatz war in einem anderen Thread zum Signal) gewählt, würde der Slot natürlich asynchron aufgerufen werden, aber ich denke, die Frage steht immer noch "Ist es garantiert, dass der Steckplatz Das mit First_Signal verbundene wird immer vor dem Second_Signal Slot bearbeitet? " Jeder hat eine Antwort bekommen? –