Ogólnie, jak działają moduły obsługi zdarzeń?

14

To jest ogólny temat: Jak działają moduły obsługi zdarzeń?

Oznacza to za kulisami - co dzieje się, gdy są tworzone.

Mam przybliżony pomysł - ale chciałbym, aby został potwierdzony.

JHarley1
źródło
Genialne, wzorzec Observer był tym, co znalazłem: przeczytałem w Internecie na ten temat i przeczytałem dobry artykuł na temat programowania sterowanego zdarzeniami. W tym artykule omówiono proces Wzorca projektowania handlerów. Dzięki temu masz parę zdarzeń, które przychodzą do dyspozytora, który następnie bierze to zdarzenie i analizuje je, aby określić jego typ zdarzenia, a następnie wysyła każde zdarzenie do modułu obsługi, który może obsłużyć zdarzenia tego typu.
JHarley1
1
Wyjaśnia, w jaki sposób dyspozytor jest nieskończoną pętlą, która zatrzymuje się tylko wtedy, gdy (na przykład w aplikacji GUI) program jest zamknięty. A potem, w jaki sposób masz wzorzec obserwatora (lub wzorzec publikowania / subskrybowania), który jest szeroko stosowany do programowania sterowanego zdarzeniami za pomocą struktur GUI i jak działa on zgodnie z hollywoodzką zasadą „Nie dzwoń do nas, zadzwonimy” .
JHarley1
Czy powiedziałbyś, że powyższe wyjaśnienie jest odpowiednie?
JHarley1
To zależy. W przypadku ogólnego przeglądu jest w porządku. Jednak dla pełnego i dokładnego wyjaśnienia, nie. Oczywiście takie wytłumaczenie może obejmować wiele stron pracy, ponieważ może to być dość wymyślne, ponieważ można na przykład dostać się do wydarzeń internetowych lub na komputerze.
JB King

Odpowiedzi:

15

Na niskim poziomie procedury obsługi zdarzeń często działają poprzez odpytywanie urządzenia i oczekiwanie na przerwanie sprzętowe. Zasadniczo wątek w tle blokuje się podczas oczekiwania na wystąpienie przerwania sprzętowego. Kiedy nastąpi przerwanie, funkcja odpytywania przestaje blokować. Aplikacja może następnie dowiedzieć się, który uchwyt urządzenia spowodował przerwanie i jaki to był rodzaj przerwania, a następnie odpowiednio zareagować (np. Wywołując funkcję modułu obsługi zdarzeń). Zwykle odbywa się to w osobnym wątku, tak aby odbywało się asynchronicznie.

Oczywiście sposób, w jaki jest to realizowane, różni się znacznie w zależności od systemu operacyjnego i rodzaju urządzenia / wejścia. W systemach UNIX jednym ze sposobów implementacji procedur obsługi zdarzeń dla gniazd, portów szeregowych lub USB jest wybranie lub odpytanie wywołań systemowych. Jeden lub więcej deskryptorów plików / urządzeń (które są powiązane z urządzeniem, takich jak gniazdo sieciowe, port szeregowy / USB itp.) Są przekazywane do pollwywołania systemowego - które jest udostępniane programiście przez niskopoziomowy interfejs API języka C. Kiedy zdarzenie występuje na jednym z tych urządzeń (np. Niektóre dane docierają do portu szeregowego), wywołanie systemowe odpytywania przestaje blokować, a aplikacja może następnie określić, który deskryptor urządzenia spowodował zdarzenie i jaki to był typ zdarzenia .

W systemie Windows jest to obsługiwane inaczej, ale pojęcia są w zasadzie takie same.

Charles Salvia
źródło