2013-02-02 3 views
6

Ich entwerfe ein Programm, das offenen Lebenslauf auf Bildern demonstrieren sollte. Ich habe bemerkt, sehr schlechtes Konzept der grundlegenden SDL-Anwendung - es besteht aus Schleife und Verzögerung.Verhindern, dass das SDL-Programm zusätzliche Ressourcen verbraucht

while(true) { 
    while(event_is_in_buffer(event)) { 
     process_event(event); 
    } 
    do_some_other_stuff(); 
    do_some_delay(100);  //Program is stuck here, unable to respond to user input 
} 

Das macht das Programm ausführen und machen, auch wenn es auf dem Hintergrund ist (oder wenn erneuten Rendern sind in erster Linie nicht notwendig). Wenn ich längere Verzögerung verwende, bekomme ich weniger verbrauchte Ressourcen, aber ich muss länger warten, bevor Ereignisse wie Mausklick verarbeitet werden.
Ich möchte, dass das Programm auf Ereignisse wartet, wie es WinApi tut oder Socket-Anfragen tun. Ist das möglich? Ich
Konzept will:

bool go=true; 
while(get_event(event)&&go) { //Program gets stuck here if no events happen 
    switch(event.type){ 
     case QUIT: go=false; 
    } 
} 

Antwort

8

Sie SDL_WaitEvent(SDL_Event *event) verwenden können, für eine Veranstaltung in der SDL zu warten. Es wird weniger Ressourcen benötigen als das Abfrageloopdesign, das Sie derzeit haben. Siehe das Beispiel in diesem doc:

{ 
    SDL_Event event; 

    while (SDL_WaitEvent(&event)) { 
     switch (event.type) { 
       ... 
       ... 
     } 
    } 
} 
+0

Vielen Dank, das ist, was ich brauchte. Gibt es einen Trick, um das Zeitlimit für das Warten zu setzen (wie bei den Sockets)? –

+1

Ja, Sie müssen SDL_WaitEventTimeout verwenden (SDL_Event * event, int timeout), siehe folgende Seite: http://wiki.libsdl.org/moin.cgi/SDL_WaitEventTimeout –