Se avevo una classe A, in cui una delle sue funzioni fa:Qt: gli eventi vengono elaborati in ordine?
void A::func()
{
emit first_signal();
emit second_signal();
}
Supponendo che una classe B ha 2 slot, uno collegato al first_signal
, e l'altro per second_signal
, si è garantito che la lo slot collegato a first_signal
verrà sempre elaborato prima dello dello slot second_signal
?
Penso che sarebbe garantito finché hanno lo stesso tipo, anche se non è predefinito. Quella in coda creerebbe due eventi, ciascuno con la stessa priorità, e quegli eventi sarebbero poi elaborati in ordine. Inoltre, il tipo di connessione predefinito è Qt :: AutoConnection, che si risolve in modo tale da far sì che l'emettitore e il destinatario si trovino entrambi nello stesso thread. –
La frase iniziale del tuo post dovrebbe leggere 'Se usi il tipo di connessione DIRETTA tra segnali e slot'; dal momento che il tipo predefinito è 'Qt :: AutoConnection' che si comporta in modo diverso a seconda che il codice di invio e l'oggetto di ricezione siano presenti in thread diversi. Vedi ['Qt :: ConnectionType' docs] (http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum) e [Threads, Eventi e QObjects] (http: // qt- project.org/wiki/Threads_Events_QObjects). – Hossein
Se si è scelto Qt :: QueuedConnection (o Qt :: AutoConnection e lo slot era in un thread diverso rispetto al segnale), ovviamente lo slot verrebbe chiamato in modo asincrono, ma penso che la domanda continui "È garantito che lo slot quello che è collegato a first_signal sarà sempre processato prima dello slot secondo_signal? " Qualcuno ha una risposta? –