2012-08-02 12 views
11

Il dottore dice Qt,Perché un modello a thread singolo viene utilizzato per aggiornare l'interfaccia utente come thread principale?

Come accennato, ogni programma ha un thread quando viene avviato. Questo thread è chiamato "thread principale" (noto anche come "thread GUI" nelle applicazioni Qt ). La GUI Qt deve essere eseguita in questo thread.

Il dottore Android dice,

Come attività e gli altri componenti, servizi gestiti per lo più filo del processo di applicazione

e iOS,

Si consiglia vivamente di non aggiornare i controlli dell'interfaccia utente ecc. Da una thread di sfondo (per esempio. un timer, comunicazioni ecc.). Questa può essere la causa degli arresti anomali di che a volte sono molto difficili da identificare. Utilizzare invece questi per forzare il codice da eseguire sul thread dell'interfaccia utente (che è sempre il thread "principale" ).

Perché utilizza un singolo modello a thread per aggiornare l'interfaccia utente?

+0

Aumenta la complessità e non ha alcun vantaggio. Vedi anche http://stackoverflow.com/questions/5544447/why-are-most-ui-frameworks-single-threaded –

risposta

20

La risposta breve è, è l'unico modo ragionevole per garantire che il display non sia danneggiato.

La risposta lunga è che consentire a più thread di aggiornare l'interfaccia utente comporta deadlock, condizioni di gara e tutti i tipi di problemi. Questa è stata la dolorosa lezione insegnata da Java AWT (tra gli altri sistemi UI) che consente a più thread di toccare l'interfaccia utente. Si veda, ad esempio, this blog post.

+0

+ 1 per il link al post del blog :) – msk

+3

@MSK - Quel post ha un link ad un grande discorso di John Ousterhout su eventi e discussioni. Sfortunatamente, è un collegamento morto. Per coloro che sono interessati, il discorso può ancora essere trovato in diversi luoghi sul web, tra cui [qui] (http://www.csd.uoc.gr/~hy527/papers/threads-ousterhout.pdf). –

+0

Bene, ora il post del blog stesso è un collegamento morto. Ho trovato una copia [qui] (http://tecnologia.revistacocktel.com/multithreaded-toolkits-a-failed-dream/) cercando il titolo del post: _ "Toolkit multithread: Un sogno fallito?" _ –

Problemi correlati