Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Wie wird ein Event ausgelöst?

d-oli / 4 Antworten / Baumansicht Nickles

Hallo Leute


 


Wie wird eigentlich ein Event ausgelöst?


 


Beispiel:


 


Ich habe ein Fenster mit einen Push-Button und einem Textfeld. Klicke ich den Push-Button (z.B. OnClick-Event) erscheint im Textfeld „Hallo Welt“.


 


Wie wird dieser Event erkannt? Ist das ein Loop der abläuft und wartet bis etwas passiert um dann zu schauen was es war? Oder wird der Klick der Maus abgefangen und dann geschaut wo im Bild man ist um dann dem Objekt zu sagen „du bist dran, tue jetzt was“? Hmmm… ziemlich verwirrend …


 


Gruss, d-oli


 

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Andreas42 d-oli „Wie wird ein Event ausgelöst?“
Optionen

Hi!

Es ist eiegntlich nicht wirklich wichtig zu wissen, wie der Event ausgelöst wird, mann muss nur eien Vortsellung haben, wann er kaommt. ;-)

Events sind letztendlich Systemnachrichten, die von Windows per Callback-Funktion an die angebundenen Anwendungen weitergeleitet werden.

Also wird im Hintergrund irgendein Teil des Betriebssystems tätig sein und bei Auslösen diverser Ereignisse eine solche Nachricht erzeugen und versenden.

Um das ganze jetzt noch komplizierter zu machen, kommt nun noch die Kapselung der ganzen internen Windows-API-Abläufe durch die Objekte der verscheidenen Compiler-Bibliotheken ins Spiel. Hier übernimmt dann irgeneine Steuerungsinstanz das Verarbeiten und Weiterleiten der Nachrichten-Events an die instanzierten Objekte (um dann z.B. irgendwelche Hock-Funktionen aufzurufen).
-> IMHO kein Loop, sondern eine Interruptsache.

Die unterste Ebene der Event-Verarbeitung dürfte warscheinlich auf Interups basieren, die z.B. ausgelöst werden, wenn man eine Taste drückt oder losläst, entsprechende Basisereignisse wird es mit Sicherheit auch für die Maus geben. (Jedenfalls war das zu DOS-Zeiten so und ich denke mir, dass das zu Windows-Zeiten immer noch so ist.)

Ich bin mir allerdings nicht sicher, wo ind wie festgestellt wird, welches Fenster gerade den Fokus hat (für Tastaturevents) oder wo genau geklickt wird. Ich denke, die Aufteilung liegt da recht frei irgendwo in den Tiefen der GUI und der verwendeten Klassenbibliothek vergraben.

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
vergisses d-oli „Wie wird ein Event ausgelöst?“
Optionen

Hi,

ich hoffe, der Thomas Woelfer meldet sich hier noch.
Er kennt sich mit der Thematik besser aus als ich
und kann es auch didaktisch besser erklären ;-)

Hier nur ein paar grundsätzliche Anmerkungen zu Windows Events:
Windows Events (Ereignisse) sollten nicht mit
Interrupts (Unterbrechungen) verwechselt werden,
auch wenn manche Events durch Interrupts ausgelöst werden.

Grundsätzlich läuft unter Windows eine Haupt Eventschleife,
die entweder auf Ereignisse lauscht (Polling) oder durch
Interrupts über Nachrichten informiert wird.
Die Ereignisse können aus vielen Richtungen kommen.
Hardware über Hardware Interrupts.
Software über Software Interrups oder sofort als Ereignis.

Falls diese Nachrichten für ein Fenster bestimmt sind, werden
sie durch die Eventschleife an den mit diesem Fenster verbundenen
Prozess weitergeleitet.
Dabei wird ein manchmal langer Routing Weg über diverse
Softwareebenen beschritten.
Darauf möchte ich hier aber nicht näher eingehen, da dies zu
sehr verwirren könnte.
Die Anwendung kann diese Nachrichten entweder ignorieren oder
z. B. über sogenannte Message Maps mit den Event Handler Routinen
(Callbacks) verbinden.
Die Anwendung sollte der Event Schleife abschließend mitteilen,
ob das Event erledigt/verbraucht ist oder es noch an
andere Interessenten weitergeleitet werden soll.
Außerdem kann auch eine Anwendung Events erzeugen und verschicken.


Zur Info:
Es gibt Alternativen zum oben beschriebenen Windows Konzept.
Da melden sich z. B. die Programme bei der Event Schleife an
und teilen dieser mit, an welchen Events sie interessiert sind
und mit welchem Callback sie darauf reagieren.
Die Event Schleife leitet dann nur noch die angemeldeten Events
weiter, was die Nachrichten Traffic und damit die CPU Belastung
deutlich minimieren kann.
Dieses Konzept findet man z. B. in ähnlicher Form unter Java
oder unter SUN OpenView in Verbindung mit XView.

Falls ich irgend etwas falsch beschrieben habe,
möge man mich bitte darauf hinweisen und mir ansonsten gnädig verzeihen....

bei Antwort benachrichtigen
d-oli Nachtrag zu: „Wie wird ein Event ausgelöst?“
Optionen

Hi

Ganz schön ausführlich die Antworten. Vielen Dank für die Mühe!

Hmm ... was ich nicht begreife ist wieso „Windows“ vor dem Thread steht. Wegen dem Wort „Event?“.
Die Frage ist bei mir Heute aufgetaucht, als ich ein bisschen mit Motif (Xm) auf Linux rumgespielt habe. Ich hatte ein Problem mit diversen Callbacks (für mich wie Events bei Windows) für ein bestimmtes Widget. Da wollte ich Wissen wie ein Event funktioniert. Grundlagen sind oft sehr hilfreich, auch wenn es zugegeben meistens ausreicht zu wissen „wann der Event kommt“.

Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
vergisses d-oli „Wie wird ein Event ausgelöst?“
Optionen

Hi,

ich habe bisher unter Unix nur mit XView und nicht Motif programmiert,
aber soviel ich weiß, ähnelt das Motif Event Modell dem von Windows.
Unter XView kann man mit den Events auch Daten schicken und
Einfluß auf die Haupt Eventschleife nehmen.
Mir ist nicht bekannt, ob das auch unter Motif geht.

Gruss, vergisses

bei Antwort benachrichtigen