Signalausführungsreihenfolge mit Qt :: QueuedConnection

8

Ich habe zwei Signale A und B nacheinander von einem Objekt in Thread X ausgesendet, und die zwei verbundenen Slots sind im Haupt-Thread. Die Verbindung ist QueuedConnection (wegen Multithreading-Verbindung). Meine Frage ist: Wird die Reihenfolge der Signale in ihrem Aufruf zu den Slots respektiert, oder gibt es eine Chance, dass sie in einer willkürlichen Reihenfolge ausgeführt werden?

    
Stefano Borini 24.04.2013, 09:18
quelle

2 Antworten

6

Beide Signale werden in einer einzigen Ereigniswarteschlange des X-Threads in die Warteschlange gestellt, sodass die entsprechenden Slots in der Reihenfolge der ausgegebenen Signale ausgeführt werden.

Aber im folgenden Fall können Sie sich nicht auf die Ausführungsreihenfolge der Slots verlassen:

%Vor%

Außerdem gibt es einen Verbindungstyp Qt::BlockingQueuedConnection . Wenn Sie Ihr erstes Signal damit verbinden, wird Ihr aktueller Thread blockiert, bis der entsprechende Slot in einem anderen Thread seinen Job beendet.

    
hank 24.04.2013, 10:24
quelle
5

Nach aktuellen QT-Quellen (5. *) werden sie in der Reihenfolge ausgesendet, in der sie mit dem FIFO-Algorithmus ausgesendet wurden. Aber wie im Kommentar erwähnt, gibt es nichts in der Dokumentation, das diese Reihenfolge angibt, also würde ich nicht vorschlagen, auf dieses Verhalten zu reagieren.

    
evilruff 24.04.2013 10:23
quelle

Tags und Links