Em geral, como funcionam os manipuladores de eventos?

14

Este é um tópico geral, como funcionam os manipuladores de eventos?

Isso significa nos bastidores - o que acontece quando eles são criados.

Tenho uma ideia aproximada - mas gostaria de confirmar.

JHarley1
fonte
Brilhante, o padrão Observador foi o que eu encontrei: li na web sobre esse assunto e li um bom artigo sobre o assunto da Programação Orientada a Eventos. Neste artigo, ele discute o processo do Padrão de Design de Manipuladores. Em que você tem um monte de eventos que chegam a um Dispatcher que, em seguida, tomam esse evento e o analisam para determinar seu tipo de evento e, em seguida, enviam cada evento a um manipulador que pode manipular eventos desse tipo.
precisa saber é o seguinte
1
Explica como o despachante é um loop infinito que só para quando (por exemplo, com um aplicativo GUI) o programa é fechado. E então como você tem um Padrão de Observador (ou o Padrão de Publicação / Assinatura) que é amplamente usado para fazer Programação Orientada a Eventos com estruturas de GUI e como ele funciona no princípio de Hollywood de "Não nos chame, vamos te ligar" .
precisa saber é o seguinte
Você diria que a explicação acima é adequada?
precisa saber é o seguinte
Depende. Para uma visão geral de alto nível, tudo bem. No entanto, para uma explicação abrangente e completa, não. É claro que essa explicação provavelmente seria muitas páginas de trabalho, pois isso pode ser bastante sofisticado, pois você pode entrar em eventos da Web versus eventos da área de trabalho, por exemplo.
JB King

Respostas:

15

Em um nível baixo, os manipuladores de eventos geralmente trabalham pesquisando um dispositivo e aguardando uma interrupção do hardware. Essencialmente, um encadeamento em segundo plano é bloqueado enquanto aguarda a interrupção do hardware. Quando ocorre uma interrupção, a função de pesquisa pára de bloquear. O aplicativo pode descobrir qual identificador de dispositivo causou a interrupção e que tipo de interrupção foi e, em seguida, agir em conformidade (por exemplo, invocando uma função de manipulador de eventos). Isso geralmente é feito em um thread separado, para que ocorra de forma assíncrona.

Obviamente, a maneira como isso é realmente implementado varia consideravelmente, dependendo do sistema operacional e do tipo de dispositivo / entrada. Nos sistemas UNIX, uma maneira pela qual os manipuladores de eventos são implementados para soquetes, portas seriais ou USB é através das chamadas de sistema de seleção ou pesquisa . Um ou mais descritores de arquivo / dispositivo (que estão associados a um dispositivo, como um soquete de rede, porta serial / USB, etc.) são passados ​​para a pollchamada do sistema - que é disponibilizada ao programador por meio de uma API C de baixo nível. Quando um evento ocorre em um desses dispositivos (como, por exemplo, alguns dados chegam em uma porta serial), a chamada do sistema de pesquisa para de bloquear e o aplicativo pode determinar qual descritor de dispositivo causou o evento e que tipo de evento foi. .

No Windows, isso é tratado de maneira diferente, mas os conceitos são basicamente os mesmos.

Charles Salvia
fonte