2009-08-07 8 views

Odpowiedz

41

W Qt v4.5 i wcześniej: Nie, zamówienie jest niezdefiniowany jak widać w the documentation here:

Jeżeli kilka gniazda są podłączone do jednego sygnału, szczeliny będą wykonywane jedna po drugiej, w dowolnej kolejności, kiedy sygnał jest emitowany.

Edycja: Od wersji 4.6 nie jest to już prawdą. Teraz automaty będą działały w kolejności, w jakiej są połączone. Stosowny akapit the current documentation:

Jeżeli kilka gniazda są podłączone do jednego sygnału, szczeliny będą wykonywane jeden po drugim, w kolejności, w jakiej zostały połączone, gdy sygnał jest emitowany

+1

@Hossein Moja odpowiedź była poprawna do wersji 4.6 QT. Jeśli spojrzysz na datę pytania (i moją odpowiedź), zobaczysz, że była to poprawna odpowiedź, gdy zadano pytanie. Zauważ, że odpowiedź Jarosława została opublikowana ponad rok później. – sepp2k

+1

OK, przepraszam, nie chciałem zaniżać twojego postu. Ponieważ to pytanie pojawiło się jako pierwszy wynik wyszukiwania Google, który zrobiłem, chciałem zatrzymać kolejnych czytelników. – Hossein

+0

musisz użyć Queueed Connections, aby było to prawdą dla różnych wątków. Tylko mówię. – smsware

2

Podczas gdy zamówienie jest nieokreślone, do tej pory we wszystkich wersjach Qt było to zamówienie connect(), z wyjątkiem sytuacji, gdy użyto Qt::QueuedConnection, w którym to przypadku oczywiście nie jest zagwarantowane, że wszystkie lub wszystkie boksy zostały wykonane po powrocie emit. Poleganie na zamówieniu jest jednak odradzane.

9

Zgodnie z dokumentacją Qt:

Jeżeli kilka szczeliny są podłączone do jednego sygnału, szczeliny zostanie wykonany jeden po drugim, w kolejności ich zostały połączone, gdy sygnał jest wydany.

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

+2

Nie jest źle. Zależy od wersji Qt. –

0

Opierając się na tym, co Zlecenie zostanie wykonane szczeliny jest zły, zły pomysł, gdyż pokonuje zarówno ducha sygnałów/połączeń gniazd i pozostawia otwarte dla niepożądanego zachowania, jeśli nie wszelkiego rodzaju programowe połączenia gniazd sygnałów.