Ricevi eventi in un ciclo di eventi, a thread singolo

0

Diciamo che ho un programma che consiste in un ciclo di eventi principale. Il ciclo degli eventi dovrebbe verificare le attività e se ne esiste uno, deve essere elaborato. L'interfaccia utente è costituita da una GUI con pulsanti, per ognuno dei quali può essere definita una funzione di callback quando viene premuto.

Usando più thread, posso semplicemente eseguire il ciclo degli eventi in un thread separato. Quando viene premuto un pulsante, inserisco un'attività in una coda che è condivisa dall'interfaccia utente e dal thread dell'evento. Il thread di eventi quindi consuma ed esegue l'attività.

La mia domanda è come si realizza questo comportamento in un'applicazione a thread singolo o in un linguaggio che non supporta il multithreading. La mia idea è di eseguire il polling per l'interazione dell'utente, ma come funziona in detta GUI in cui una pressione di un pulsante può essere registrata solo dall'invocazione di un callback specificato?

    
posta Marius Herzog 29.04.2015 - 09:42
fonte

2 risposte

2

Il sistema operativo crea eventi e lo inserisce nella coda degli eventi fornita dal sistema operativo che l'applicazione esegue il polling nel ciclo degli eventi.

In Windows con GetMessage e amici.

I framework di Windowing (java's swing, Qt ecc.) implementeranno questo ciclo per te e ti permetteranno di inserire i tuoi eventi personalizzati.

    
risposta data 29.04.2015 - 10:13
fonte
1

È possibile combinare diverse attività in un singolo ciclo a thread, ad es. utilizzando le funzioni inattive (come ho spiegato qui ).

Quindi, con un loop di eventi GUI, quando si verifica un evento esterno (ad esempio, l'utente preme un pulsante), il callback potrebbe aggiungere una funzione inattiva nel ciclo.

Quindi è importante che la funzione di inattività restituisca il controllo al ciclo degli eventi abbastanza rapidamente (in genere, in pochi millisecondi). Potrebbe aggiungersi di nuovo al ciclo per continuare l'elaborazione.

Naturalmente, il concetto di continuazioni è rilevante, e puoi vedere una funzione inattiva che si aggiunge nuovamente come alcuni stile di passaggio continuo

scritti a mano

Vedi anche questa risposta per ulteriori riferimenti.

    
risposta data 29.04.2015 - 14:09
fonte

Leggi altre domande sui tag