Si j'avais une classe A, où l'une de ses fonctions? ElleQt: Les événements sont-ils traités dans l'ordre?
void A::func()
{
emit first_signal();
emit second_signal();
}
En supposant qu'une classe B dispose de 2 emplacements, un connecté à first_signal
, et l'autre à second_signal
, est-il garanti que la slot qui est connecté à first_signal
sera toujours traité avant l'emplacement second_signal
?
Je pense que ce serait garanti tant qu'ils ont le même type, même si ce n'est pas par défaut. La file d'attente créerait deux événements, chacun avec la même priorité, et ces événements seraient ensuite traités dans l'ordre. En outre, le type de connexion par défaut est Qt :: AutoConnection, qui se résout à diriger tant que l'émetteur et le récepteur sont dans le même thread. –
La phrase de début de votre message devrait se lire 'Si vous utilisez le type de connexion DIRECT entre les signaux et les emplacements '; Le type par défaut est 'Qt :: AutoConnection' qui se comporte différemment selon que le code d'envoi et l'objet récepteur résident ou non dans des threads différents. Voir les documents ['Qt :: ConnectionType'] (http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum) et [Threads, Events et QObjects] (http: // qt- project.org/wiki/Threads_Events_QObjects). – Hossein
Si vous avez choisi Qt :: QueuedConnection (ou Qt :: AutoConnection et que le slot était dans un thread différent du signal), bien sûr le slot serait appelé de manière asynchrone, mais je pense que la question est toujours "Est-ce garanti que le slot qui est connecté à first_signal sera toujours traité avant le slot second_signal? " Quelqu'un a-t-il une réponse? –