I have two signals A and B emitted one after another from an object in thread X, and the two connected slots are in the Main thread. The connection is QueuedConnection (due to multithreading connect). My question is: is the order of the signals respected in their call to the slots, or is there a chance for them to be executed in an arbitrary order?
Queued Connection The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread. Blocking Queued Connection The slot is invoked as for the Queued Connection, except the current thread blocks until the slot returns.
In Qt, we have an alternative to the callback technique: We use signals and slots. A signal is emitted when a particular event occurs. Qt's widgets have many predefined signals, but we can always subclass widgets to add our own signals to them. A slot is a function that is called in response to a particular signal.
You can use a local event loop to wait for the signal to be emitted : QTimer timer; timer. setSingleShot(true); QEventLoop loop; connect( sslSocket, &QSslSocket::encrypted, &loop, &QEventLoop::quit ); connect( &timer, &QTimer::timeout, &loop, &QEventLoop::quit ); timer.
Both of your signals will be queued in a single event queue of the X thread, so corresponding slots will be executed in the order of signals were emitted.
But in the following case you can't rely on the slots execution order:
signal A connected to a slot in X thread
signal B connected to a slot in Y thread
Also, there is a Qt::BlockingQueuedConnection
connection type. If you connect your first signal using it, your current thread will be blocked until the corresponding slot in another thread finishes its job.
According to current QT sources (5.*) they will be dispatched in sequence they were emitted using FIFO algorithm. But as stated in comment there is nothing in documentation which specifies this order so I wouldn't suggest to relay on that behaviour.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With