SDL_PumpEvents



  • Hallo!

    Zuerst einmal ein großes Lob für die verlässliche Community! Hier findet sich wirklich immer jemand, der einem Fragen beantworten kann.

    Momentan beschäftige ich mich mit Events in SDL.

    Es gibt da ja die Event-Queue, wo die Events drin gespeichert werden (also wenn man z.B. eine bestimmte Taste drückt).

    Mit der Funktion SDL_PumpEvents soll der Tastaturstatus aktualisiert werden. Wenn man ein Fenster erstellt, kann man dieses auch nur verschieben, wenn man SDL_PumpEvents aufruft.

    Meine Frage ist:
    1. wie funktioniert das genau bzw. wie arbeitet SDL_PumpEvents ? Wie werden die Events bzw. die Tasten-Drücke des Nutzers durch die Funktion PumpEvents gespeichert ? (Ich habe gelesen, dass sie in eine Event-Queue gelegt werden)

    2. Wie wird die Event-Queue wieder entleert ? Sie kann ja nicht immer weiter aufgefüllt werden.

    3. Wird der Tastaturstatus von der Funktion SDL_PumpEvents tatsächlich auch schon aktualisiert ? Wenn Ja, dann müsste ja nichts in die SDL_EventQueue geschoben werden. Deshalb interessiert mich auch die Frage:

    4. Wie gelangen die Events aus der Event-Queue und werden verarbeitet ?

    Danke im Voraus und Freundliche Grüße!

    Monadic512



  • #include <iostream>
    #include <SDL.h>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
    	SDL_Surface *surface;
    
    	Uint8 *m_pKeyState;
    	m_pKeyState = SDL_GetKeyState (NULL);
    
    	surface = SDL_SetVideoMode(300, 100, 16, NULL);
    	SDL_WM_SetCaption("Unser Pong-Spiel", "Pong");
    
    	while(m_pKeyState[SDLK_2] == false)
    	{
    		SDL_PumpEvents();
    	}
    
    	return 0;
    }
    

    Dieses Programm hält einfach ein Fenster offen, bis die Taste "2" gedrückt wird. PumpEvents ist anscheinend notwendig, um den Keystate zu aktualisieren.

    Doch mich interessiert der genaue Ablauf:
    1. Was genau Tut SDL_PumpEvents
    2. Wie werden die Events in der Event-Queue gespeichert
    3. Wie und wann gelangen die Events aus der Event-Queue ?
    4. Wie werden die Events, die aus der Event-Queue gelangen, verarbeitet ?
    5. Wie wird im Rahmen dieser Event-Verarbeitung der KeyState aktualisiert ?

    Ich weiß, das sind sehr viele Fragen. Leider hab ich bisher nichts Gescheites dazu gefunden, nur dass SDL_PumpEvents Events in die EventQueue pumpt und den Tastaturstatus aktualisiert.

    Vielleicht könnt ihr mir weiter heflfen

    Danke im Voraus und Freundliche Grüße
    Monadic512



  • schau dir doch den Quellcode an, wenns dich interessiert?

    greetz KN4CK3R



  • Der Grund für die Existenz der Funktion dürfte im Wesentlichen sein, dass sie den kleinsten gemeinsamen Nenner zwischen den unterstützten Systemen darstellt. SDL_PumpEvents selbst macht nicht viel mehr, als Events aus der Systemqueue abzuholen und der Verarbeitung zuzuführen, bietet also ein einfaches Interface für die Eventpumpe des Programms (bzw. des Threads).

    Was dabei genau passiert, ist notgedrungen systemabhängig; grob gesagt wird das Event aber an einen vorher an entsprechender Stelle registrierten Event-Handler weitergeleitet, in dem die eigentliche Verarbeitung stattfindet. An dieser Stelle wird dann auch der Key-State aktualisiert.

    Du kannst SDL_PumpEvents dementsprechend als "verarbeite alles, was sich zwischenzeitlich an Events angesammelt hat" verstehen.



  • Hallo!

    Erstmal Danke für die schnelle Information.

    Zum zweiten Beitrag habe ich eine Frage:

    Du schreibst, dass SDL_PumpEvents die Events aus der Event-Queue herausholt und verarbeitet bzw. verarbeiten lässt.

    Wie gelangen denn die Events überhaupt in die Event-Queue ? Geschieht das automatisch ?

    Wenn ich z.B. die Taste "w" drücke: wird dann diese Information automatisch als Event in der Event-Queue gespeichert und dann durch SDL_PumpEvents ausgelesen und verarbeitet ?

    Danke im Voraus und Freundliche Grüße

    Monadic512



  • Das ist Sache des Betriebssystems bzw. des X-Servers (oder wessen auch immer seine Rolle einnimmt). Du musst dich nicht darum kümmern, dass die Events in der Queue landen.



  • Ok!^^

    Danke Danke für die Hilfe^^

    Grüße

    Monadic512


Log in to reply