Mam obiekt QObject, który ma wiele gniazd połączonych z jednym z jego sygnałów. Czy istnieje kolejność, w której z każdego z tych gniazd są wywoływane, gdy emitowany jest sygnał?Kolejność gniazd wywoływanych w QObject
Odpowiedz
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
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.
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.
Nie jest źle. Zależy od wersji Qt. –
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.
- 1. Inaccessible konwersji w QObject
- 2. „QObject :: QObject” nie może uzyskać dostępu do prywatnej członka zadeklarowana w klasie „QObject”
- 3. QObject :: deleteLater przez QThread
- 4. Jak ustawić $? w funkcjach wywoływanych przez PS1?
- 5. QVariant to QObject *
- 6. Wizualizacja sygnałów i gniazd QT
- 7. QThread finished() connected to deletelater z QObject
- 8. Programowanie gniazd w C++
- 9. Jak ciężki jest naprawdę QObject?
- 10. Dlaczego warto używać QObject :: setObjectName()?
- 11. Moq i dostęp do wywoływanych parametrów
- 12. Dlaczego nie można ustawić rodzica QObject w klasie, której QObject jest tylko pośrednią podstawą?
- 13. Czy blokada muteksu dotyczy również wywoływanych funkcji?
- 14. Jak wymusić GHC na wywoływanych wywołaniach FFI?
- 15. Podłączanie sygnałów do gniazd z mniejszymi parametrami dozwolonymi w Qt?
- 16. Funkcja htons() w programowaniu gniazd
- 17. Różnice między gniazd TCP i gniazd internetowych, jeszcze raz
- 18. Lekka biblioteka gniazd Java
- 19. Wylot kontra kolekcja gniazd
- 20. Xcode 4 - Podłączanie gniazd
- 21. Instalowanie biblioteki gniazd Lua
- 22. Haskell: Unix Domeny gniazd
- 23. Kolejność i kolejność parametrów OleDbCommand
- 24. Dobry pulpit gniazd klienta
- 25. BlackBerry 10 Niewyłączone włączenie <QObject>
- 26. Podklasa QObject, qRegisterMetaType i prywatny konstruktor kopii
- 27. Kolejność list w pythonach
- 28. Kolejność grafiki w R
- 29. Kolejność linków w css
- 30. Kolejność kolumn w pandas.concat
@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
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
musisz użyć Queueed Connections, aby było to prawdą dla różnych wątków. Tylko mówię. – smsware