Wie genau löst man im Code einen Event aus?

...komplette Frage anzeigen

4 Antworten

In der Regel ist ein «busy»-wait (polling), also in einer Schleife permanent die Signale zu prüfen sehr unperfomant, will sagen ressourcenfressend.

Heute wird meist eine Interrupt-Routine verwendet. Sobald ein Hardwareevent (Maus, Tastatur, o. ä.) auftritt, verzweigt der Prozessor in eine Interrupt-Routine; dies wird dem Prozessor über sog. Interrupt-Leitungen (also HIGH Zustand am Kabel) mitgeteilt. Das laufende Programm wird dann unterbrochen und in die Interrupt-Routine verzweigt, welche aber sofort wieder zurückkehren muss, wenn das Event-Objekt erzeugt und weitergeleitet ist. Das Hauptprogramm soll nämlich durch die Interrupts nicht zu lange unterbrochen werden. Das erzeugte Event-Objekt für das Betriebssystem wird später dem Programmier-Framework (.NET, jvm) weitergeleitet. Bei Windows 3.1 (lange ists her) hat die Interrupt-Routine nur ein Datenobjekt (Record) erzeugt, welches in eine Event-Liste (sog. Event-Queue) gelegt wurde. Das Betriebssystem kann danach in einer Schleife jedes Event dieser Schleife bearbeiten und den entsprechenden Programmen (.NET, jvm, Office, ...) weiterleiten. Die Programme können das Event nun komplett verarbeiten oder als unverarbeitet zurücksenden, damit das Event auch weiteren Programmen zur Verfügung stehen kann. Somit ist es auch möglich, dass ein Event mehreren Programmen zur Verfügung steht: Dazu werde ich das Event verarbeiten, es aber danach dem Betriebssystem als unbearbeitet zurücksenden.

Siehe auch hier:

https://de.wikipedia.org/wiki/Interrupt

dort werden Maus und Tastatur als "Ein-/Ausgabegeräte" bezeichnet.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Berny96
24.05.2016, 13:36

Aus Interesse, wieso hat das Betriebsystem nicht die Intelligenz das Objekt dann als "verarbeitet" wieder anzunehmen und es trotzdem an die nächsten Programme weiterzuleiten. Wieso täuschen die Programme nach dem Verarbeiten vor es sei unverarbeitet? Danke für die Super Info!! Ach und noch eine Frage: Kann ich davon ausgehen das WPF und Forms die Interupt-Routine verwenden? 

0

Ich stelle mal eine Vermutung auf:

Ich denke das mit deinem Thread  ist schon ganz richtig. Jedoch um das zu ergänzen glaube ich, dass wenn du klickst, alle Buttons/Elemente durchgegangen werden und mit buttonObjekt.getBounds() (Liefert glaube ich ein Rectangle Objekt) überprüft wird (RectangleObjekt.intersects()) ob der Punkt des Klicks auf dem Button liegt und dann halt das Event gefeuert wird :D Ist halt nur ne Vermutung :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Berny96
23.05.2016, 20:31

Glaubst du wirklich die Main Loop solcher API's wurde in der Sprache geschrieben mit der man sie verwendet? Also ich könnte mir nur sehr schwer vorstellen das der Code der Hinter der Technologie steckt C# ist. Was meinst du?

0

Wie du schon vermutet hast gibt es beim Event-driven Programmieren eine Hauptschleife, die auf ein Event wartet wie z.B. eine Tasteneingabe, die dann eine Callback-Funktion aufruft.

Hier wird es beschrieben:

https://en.wikipedia.org/wiki/Event-driven\_programming


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Berny96
23.05.2016, 20:29

Da bin ich doch beruhigt das meine Vorstellungen der Wahrheit entsprechen. Danke!

0

einfach eine funktion mit xxxx_mouseenter oder xxxx_click

da brauchst du keine dauerhafte schleife ist wie bei den anderen objekten auch

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Berny96
23.05.2016, 20:24

Du hast die Frage ein wenig falsch verstanden aber danke für die Mühe :)

0

Was möchtest Du wissen?