2013-04-24 16 views
8

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

+0

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

risposta

6

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.

5

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.

Problemi correlati