En general, ¿cómo funcionan los controladores de eventos?

14

Este es un tema general, ¿Cómo funcionan los controladores de eventos?

Esto significa detrás de escena: lo que sucede cuando se crean.

Tengo una idea aproximada, pero me gustaría confirmarla.

JHarley1
fuente
Brillante, el patrón de observador fue lo que encontré: he leído en la web sobre este tema y he leído un buen artículo sobre el tema de la programación dirigida por eventos. En este documento, se analiza el proceso del Patrón de diseño de controladores. Por el cual tiene una sucesión de Eventos que llegan a un Despachador que luego toma ese evento y lo analiza para determinar su tipo de evento, y luego envía cada evento a un controlador que puede manejar eventos de ese tipo.
JHarley1
1
Explica cómo el despachador es un bucle infinito que solo se detiene cuando (por ejemplo, con una aplicación GUI) se cierra el programa. Y luego, cómo tiene un Patrón de Observador (o el Patrón de Publicación / Suscripción) que se usa ampliamente para hacer Programación Dirigida por Eventos con marcos de GUI y cómo funciona según el principio de Hollywood de "No nos llame, lo llamaremos" .
JHarley1
¿Diría que la explicación anterior es adecuada?
JHarley1
Depende. Para una visión general de alto nivel, está bien. Sin embargo, para una explicación completa y exhaustiva, diablos no. Por supuesto, tal explicación sería muchas páginas de trabajo, ya que esto puede ser bastante sofisticado, ya que podría entrar en eventos de web vs escritorio, por ejemplo.
JB King

Respuestas:

15

En un nivel bajo, los controladores de eventos a menudo funcionan sondeando un dispositivo y esperando una interrupción de hardware. Esencialmente, un hilo de fondo se bloquea, mientras se espera que ocurra una interrupción de hardware. Cuando ocurre una interrupción, la función de encuesta detiene el bloqueo. La aplicación puede averiguar qué dispositivo manejó la interrupción y qué tipo de interrupción fue, y luego actuar en consecuencia (por ejemplo, invocando una función de controlador de eventos). Esto generalmente se hace en un hilo separado para que ocurra de forma asincrónica.

Por supuesto, la forma en que esto se implementa realmente varía considerablemente según el sistema operativo y el tipo de dispositivo / entrada. En los sistemas UNIX, una forma en que los controladores de eventos se implementan para cosas como sockets, puertos seriales o USB es a través de las llamadas del sistema select o poll . Uno o más descriptores de archivo / dispositivo (que están asociados con un dispositivo, como un zócalo de red, puerto serie / USB, etc.) se pasan a la pollllamada del sistema, que se pone a disposición del programador a través de una API C de bajo nivel. Cuando se produce un evento en uno de estos dispositivos (como, por ejemplo, algunos datos llegan a un puerto serie), la llamada del sistema de sondeo detiene el bloqueo y la aplicación puede determinar qué descriptor de dispositivo causó el evento y qué tipo de evento fue .

En Windows, esto se maneja de manera diferente, pero los conceptos son básicamente los mismos.

Charles Salvia
fuente