2013-02-02 2 views
6

Sto progettando un programma che dovrebbe mostrare un CV aperto sulle immagini. Ho notato un pessimo concetto di applicazione SDL di base: consiste di loop e delay.Impedisci al programma SDL di consumare risorse aggiuntive

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 
} 

Questo rende il programma di esecuzione e rende anche se è su sfondo (o se ri-il rendering non è necessario, in primo luogo). Se uso un ritardo più lungo, ottengo meno risorse consumate, ma devo aspettare più a lungo prima che gli eventi, come il clic del mouse, vengano elaborati.
Quello che voglio è fare in modo che il programma attenda gli eventi, come fa WinApi o le richieste socket. È possibile?
Concetto voglio:

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

risposta

8

È possibile utilizzare SDL_WaitEvent(SDL_Event *event) di aspettare per un evento nella SDL. Userà meno risorse rispetto al design del ciclo di polling che hai attualmente. Vedere l'esempio in questo doc:

{ 
    SDL_Event event; 

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

Grazie, questo è quello che mi serviva. C'è qualche trucco per impostare il limite di tempo per l'attesa (come con le prese)? –

+1

Sì, devi usare SDL_WaitEventTimeout (evento SDL_Event *, int timeout), vedi questa pagina: http://wiki.libsdl.org/moin.cgi/SDL_WaitEventTimeout –