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;
}
}
Grazie, questo è quello che mi serviva. C'è qualche trucco per impostare il limite di tempo per l'attesa (come con le prese)? –
Sì, devi usare SDL_WaitEventTimeout (evento SDL_Event *, int timeout), vedi questa pagina: http://wiki.libsdl.org/moin.cgi/SDL_WaitEventTimeout –