Ho due segnali A e B emessi uno dopo l'altro da un oggetto nel thread X, e i due slot collegati sono nel thread principale. La connessione è QueuedConnection (a causa della connessione multithreading). La mia domanda è: l'ordine dei segnali è rispettato nella loro chiamata alle slot, o c'è la possibilità che vengano eseguiti in un ordine arbitrario?Ordine di esecuzione del segnale con Qt :: QueuedConnection
risposta
Entrambi i segnali saranno accodati in una singola coda di eventi del thread X, quindi gli slot corrispondenti verranno eseguiti nell'ordine in cui i segnali sono stati emessi.
Ma nel seguente caso in cui non si può contare su l'ordine di slot di esecuzione:
signal A connected to a slot in X thread
signal B connected to a slot in Y thread
Inoltre, c'è un tipo di connessione Qt::BlockingQueuedConnection
. Se si collega il primo segnale che lo utilizza, il thread corrente verrà bloccato fino a quando lo slot corrispondente in un altro thread termina il suo lavoro.
In base alle sorgenti QT correnti (5. *) verranno inviate in sequenza e sono state emesse utilizzando l'algoritmo FIFO. Ma come affermato nel commento, non c'è nulla nella documentazione che specifica questo ordine, quindi non suggerirei di riferire su quel comportamento.
- 1. Qt collegare due segnali insieme utilizzando QueuedConnection
- 2. Ordine di connessione segnale-slot
- 3. Qt - nessun errore di segnale
- 4. Segnale Qt virtuale?
- 5. emit std :: string con il segnale qt
- 6. Errore linker con segnale Qt/Esempio di slot
- 7. Task.ContinueWith ordine di esecuzione
- 8. C++ Segnale Qt e slot non attivo
- 9. Errore di esecuzione con Qt Creator
- 10. hook_preprocess_node() ordine di esecuzione
- 11. Javascript ordine di esecuzione con setTimeout()
- 12. emette il segnale Qt dal thread non Qt o il loop di eventi principale di ouside Qt con 4.5
- 13. DbContext SaveChanges Ordine di esecuzione Esecuzione
- 14. Segnale C++ allo slot QML in Qt
- 15. Qt collegare funzione - disambiguazione segnale utilizzando lambda
- 16. Qt invia segnale a thread diversi
- 17. Esecuzione Qt unit test
- 18. AsyncTask Android - Ordine di esecuzione
- 19. Ordine di esecuzione hook_cron Drupal
- 20. RegisterStartupScript e ordine di esecuzione
- 21. Ordine di esecuzione per l'ApiController
- 22. Ordine di esecuzione nell'elenco di inizializzazione del costruttore
- 23. Esecuzione ordine di filtro personalizzato di autorizzazione con ValidateAntiForgeryToken
- 24. Ordine di esecuzione del test case in pytest
- 25. Ordine di condizione di esecuzione in MySQL
- 26. Ordine di esecuzione dei filtri servlet
- 27. Esecuzione Ordine di Middleware in laravel 5
- 28. ng Ordine di esecuzione ripetizioni e direttive
- 29. bloccato in attesa di un segnale asincrono Qt
- 30. Qt Segnale Catching della casella di controllo per eseguire un'azione
Ho sempre pensato che vengano eseguiti nell'ordine di emissione, perché verranno aggiunti come eventi nella coda degli eventi quando vengono emessi con priorità identica (perché su quali criteri modificherà la priorità?). Tuttavia non riesco a trovare alcun documento per confermare questo, né ho cercato nel codice sorgente ... – cmannett85