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.



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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.