On 2/3/2009 4:19 PM, Frédéric wrote:
Le 3/2/2009, "Giovanni Bajo" <ra...@develer.com> a écrit:

The trick is that a signal/slot connection across a thread is different
from a normal one: in a normal connection, slots are called immediately,
within the "emit()" call. Instead, in an asynchronous connection, when
the signal is emitted, an event is posted to the main thread (posting
events is thread-safe); then the receiving thread's exec loop will
process the event and call the correct slot.

In this last case, does the call to emit() immediatly return, and the
thread go on with the next instruction, or does it wait until the event
has really called the slot?

Depends on the connection type (which you can manually specify during the connect() call, or leave the default).

The default (for connections between different threads) is Qt.QueuedConnection, which means that the emit() call exits immediately. Otherwise, you can specify Qt.BlockingQueueConnection: the emitting thread will wait until the receiving thread has found time to process all the slots. Notice that it's easy to deadlock, if you don't pay enough attention (and even if you do ;).
--
Giovanni Bajo
Develer S.r.l.
http://www.develer.com


_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to