Questo è un argomento generale, come funzionano i gestori di eventi?
Ciò significa dietro le quinte: cosa succede quando vengono create.
Ho un'idea approssimativa, ma vorrei averlo confermato.
Questo è un argomento generale, come funzionano i gestori di eventi?
Ciò significa dietro le quinte: cosa succede quando vengono create.
Ho un'idea approssimativa, ma vorrei averlo confermato.
Risposte:
A un livello basso, i gestori di eventi funzionano spesso eseguendo il polling di un dispositivo e in attesa di un interrupt di processo. In sostanza, un thread in background si blocca, in attesa che si verifichi un interrupt di processo. Quando si verifica un interruzione, la funzione di polling interrompe il blocco. L'applicazione può quindi scoprire quale handle di dispositivo ha causato l'interrupt e che tipo di interrupt è stato e quindi agire di conseguenza (ad es. Invocando una funzione del gestore di eventi). Questo di solito viene fatto in un thread separato in modo che avvenga in modo asincrono.
Naturalmente, il modo in cui questo viene effettivamente implementato varia considerevolmente a seconda del sistema operativo e del tipo di dispositivo / input. Sui sistemi UNIX, un modo in cui i gestori di eventi sono implementati per cose come socket, porte seriali o USB è attraverso le chiamate del sistema di selezione o polling . Uno o più descrittori di file / dispositivo (che sono associati a un dispositivo, come un socket di rete, una porta seriale / USB, ecc.) Vengono passati alla poll
chiamata di sistema, che viene resa disponibile al programmatore tramite un'API C di basso livello. Quando si verifica un evento su uno di questi dispositivi (ad esempio, alcuni dati arrivano su una porta seriale), la chiamata del sistema di polling interrompe il blocco e l'applicazione può quindi determinare quale descrittore del dispositivo ha causato l'evento e che tipo di evento è stato .
Su Windows, questo viene gestito in modo diverso, ma i concetti sono sostanzialmente gli stessi.