Si tuviera una clase A, donde una de sus funciones hace:Qt: ¿Los eventos se procesan en orden?
void A::func()
{
emit first_signal();
emit second_signal();
}
Suponiendo que una clase B tiene 2 ranuras, una conectada a first_signal
, y el otro a second_signal
, es que garantizada que la la ranura que está conectada a first_signal
siempre se procesará antes de la ranura second_signal
?
Creo que estaría garantizado siempre que tengan el mismo tipo, incluso si no es el predeterminado. El que está en cola creará dos eventos, cada uno con la misma prioridad, y esos eventos se procesarán en orden. Además, el tipo de conexión predeterminado es Qt :: AutoConnection, que se resuelve a dirigir siempre que el emisor y el receptor estén en el mismo hilo. –
La frase inicial de su publicación debe decir 'Si usa el tipo de conexión DIRECTA entre señales y ranuras '; dado que el tipo predeterminado es 'Qt :: AutoConnection' que se comporta de manera diferente dependiendo de si el código de envío y el objeto de recepción viven o no en hilos diferentes. Consulte ['Qt :: ConnectionType' docs] (http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum) y [Threads, Events and QObjects] (http: // qt- project.org/wiki/Threads_Events_QObjects). – Hossein
Si eligió Qt :: QueuedConnection (o Qt :: AutoConnection y la ranura estaba en un hilo diferente a la señal), por supuesto, la ranura se llamaría asincrónicamente, pero creo que la pregunta sigue en pie "¿Se garantiza que la ranura que está conectado a first_signal siempre se procesará antes de la ranura de second_signal? " Alguien tiene una respuesta? –