2009-08-07 1 views

Répondre

41

Dans Qt v4.5 et versions antérieures: Non, l'ordre est indéfini comme on peut le voir dans the documentation here:

Si plusieurs emplacements sont connectés à un signal, les créneaux horaires seront exécutés l'un après l'autre, dans un ordre arbitraire, lorsque le signal est émis.

Éditer: À partir de la version 4.6 ce n'est plus vrai. Maintenant, les slots vont fonctionner dans l'ordre où ils sont connectés. Le paragraphe pertinent de the current documentation:

Si plusieurs emplacements sont connectés à un signal, les créneaux horaires seront exécutés l'un après l'autre, dans l'ordre où ils ont été connectés, lorsque le signal est émis

+1

@Hossein Ma réponse était correcte jusqu'à la version 4.6 de QT. Si vous regardez la date de la question (et ma réponse), vous verrez que c'était la bonne réponse quand la question a été posée. Notez que la réponse de Yaroslav a été postée plus d'un an plus tard. – sepp2k

+1

OK, désolé, je ne voulais pas sous-évaluer votre message. Puisque cette question est apparue comme le premier résultat de la recherche Google que j'ai faite, je voulais empêcher d'autres lecteurs de prêter à confusion. – Hossein

+0

vous devez utiliser des connexions en file d'attente pour que cela soit vrai pour différents threads. Je dis juste. – smsware

2

Alors que la commande est indéfinie, jusqu'à présent, dans toutes les versions Qt, elle a été connect(), sauf lorsque Qt::QueuedConnection est utilisé, auquel cas, bien sûr, il n'est même pas garanti que tous les emplacements aient été exécutés lorsque emit retourne. S'appuyer sur la commande est toujours découragé, cependant.

9

Selon la documentation Qt:

Si sont connectés plusieurs emplacements à un signal , les fentes seront exécutées une après l'autre, dans l'ordre ont été connectés, lorsque le signal est émis.

http://qt-project.org/doc/qt-4.8/signalsandslots.html

+2

Pas mal. Dépend de la version Qt. –

0

En se fondant sur quel ordre les créneaux horaires seront exécutés est une mauvaise, mauvaise idée, car elle va à l'encontre à la fois l'esprit des signaux/connexions de machines à sous et vous laisse grand ouvert pour le comportement indésirable si vous toute sorte de connexions programmatiques de signaux & fentes.