Dies ist ein allgemeines Thema. Wie funktionieren Event-Handler?
Das bedeutet hinter den Kulissen - was passiert, wenn sie erstellt werden.
Ich habe eine grobe Idee - möchte sie aber gerne bestätigen lassen.
Dies ist ein allgemeines Thema. Wie funktionieren Event-Handler?
Das bedeutet hinter den Kulissen - was passiert, wenn sie erstellt werden.
Ich habe eine grobe Idee - möchte sie aber gerne bestätigen lassen.
Antworten:
Auf einer niedrigen Ebene arbeiten Ereignishandler häufig mit der Abfrage eines Geräts und auf einen Hardware-Interrupt warten. Im Wesentlichen wird ein Hintergrund-Thread blockiert, während auf das Auftreten eines Hardware-Interrupts gewartet wird. Wenn ein Interrupt auftritt, stoppt die Polling-Funktion die Blockierung. Die Anwendung kann dann herausfinden, welches Gerätehandle den Interrupt verursacht hat und um welche Art von Interrupt es sich handelt, und dann entsprechend vorgehen (z. B. durch Aufrufen einer Event-Handler-Funktion). Dies geschieht normalerweise in einem separaten Thread, sodass es asynchron geschieht.
Natürlich ist die Art und Weise, wie dies tatsächlich implementiert wird, je nach Betriebssystem und Art des Geräts / Eingangs sehr unterschiedlich. Auf UNIX-Systemen können Ereignisbehandlungsroutinen für Sockets, serielle oder USB-Ports zum Beispiel über select oder poll implementiert werden Systemaufrufe implementiert werden. Eine oder mehrere Datei- / Gerätedeskriptoren (die einem Gerät zugeordnet sind, z. B. ein Netzwerksocket, ein serieller / USB-Anschluss usw.) werden an den poll
Systemaufruf übergeben, der dem Programmierer über eine C-API auf niedriger Ebene zur Verfügung gestellt wird. Wenn ein Ereignis auf einem dieser Geräte auftritt (z. B. wenn einige Daten über einen seriellen Anschluss eingehen), wird der Abfragesystemaufruf nicht mehr blockiert, und die Anwendung kann dann feststellen, welcher Gerätedeskriptor das Ereignis verursacht hat und um welchen Ereignistyp es sich handelt .
Unter Windows wird dies anders gehandhabt, aber die Konzepte sind im Grunde gleich.