Laut dem, was ich bisher gehört habe, funktionieren Events rein reaktiv, will meinen, dass erst mit dem Eintritt des Events etwas ausgeführt wird und das Programm ansonsten "schläft".
Wie wird das umgesetzt?
Angenommen, ich möchte, dass der Bildschirm rot eingefärbt wird, wenn man die Leertaste drückt, würde man ja üblicher Weise in einer Schleife pollen, ob die Taste gerade gedrückt ist.
Events sollen jetzt ja aber diese Abfrage unnötig machen. Mich würde aber interessieren wie das gemacht wird.
Meine Idee ist, dass ein Event nichts weiter ist, als ein function-call aller Funktionen (oder Aufruf aller Prozesse / Threads) (eventhandler?), deren Adresse beispielsweise in Form eines function-pointers in irgend einer Form von container, zB. einem Vektor, hinterlegt sind, ich nehme mal an, beim Betriebssystem oder zumindest der nächsthöheren Instanz und die wieder, sodass das dann früher oder später beim Betriebssystem hinterlegt ist.
Tritt nun also beim Betriebssystem, der Fall ein, dass die Taste gedrückt wird, führt das Betriebssystem alle hinterlegten Funktionen aus, also "aktiviert" quasi die eventhandler.
Somit würde nicht gepollt werden, das was ausgeführt wird (in dem Fall die Funktion) passiert im Prinzip rein reaktiv auf das Event, welches vom Betriebssystem ausgelöst wird.
Vielleicht ist das ja der tatsächliche Weg, aber wenn nicht, wie funktioniert es wirklich?
Und wenn es tatsächlich so funktioniert, wie macht es dann das Betriebssystem? Bei meiner Methode müsste ja früher oder später gepollt werden. Zwar hätte man den Vorteil, dass für alle Programme die in irgend einer Form auf den Tastendruck reagieren sollen, nur einmal zentral gepollt werden muss und nicht für jedes einzeln, aber es würde ja dennoch dem Eventprinzip widersprechen oder nicht? Schließlich wäre es nicht REIN reaktiv.
Ich glaube, dass es für ein rein reaktives System nötig wäre, bis auf die hardware-ebene zurückzugehen, wo halt irgend ein decoder auf das binäre Signal der entsprechenden Taste anspringt und eine 1 liefert, deren Leitung mit dem Prozessorbefehl oder was auch immer verbunden ist (bzw halt digital "freigeschalten" ist), der dann das Event auslöst (was sich dann aber kaum noch von einer Schleife mit der Überprüfung des Signals unterscheidet, da ja auch das dauerhaft einen Teil des Prozessor beanspruchen / belegen würde)?
Also, wie ist es wirklich? :)