From: Wolfgang Becker Date: Wed, 26 Aug 2009 21:39:05 +0000 (+0000) Subject: Patch by Matt McCutchen to fix active waiting in main loop. (Bug 480) X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=afd619b182a9dbe6afe93670747f7bb8ec485d97;p=supertux.git Patch by Matt McCutchen to fix active waiting in main loop. (Bug 480) SVN-Revision: 5908 --- diff --git a/src/mainloop.cpp b/src/mainloop.cpp index 0807a5800..444d3d2bd 100644 --- a/src/mainloop.cpp +++ b/src/mainloop.cpp @@ -295,29 +295,32 @@ MainLoop::run(DrawingContext &context) elapsed_ticks = 0; } + if(elapsed_ticks < ticks_per_frame) + { + Uint32 delay_ticks = ticks_per_frame - elapsed_ticks; + SDL_Delay(delay_ticks); + last_ticks += delay_ticks; + elapsed_ticks += delay_ticks; + } + int frames = 0; - if (elapsed_ticks > ticks_per_frame) + while(elapsed_ticks >= ticks_per_frame && frames < MAX_FRAME_SKIP) { - while(elapsed_ticks > ticks_per_frame && frames < MAX_FRAME_SKIP) - { - elapsed_ticks -= ticks_per_frame; - float timestep = 1.0 / LOGICAL_FPS; - real_time += timestep; - timestep *= speed; - game_time += timestep; - - process_events(); - update_gamelogic(timestep); - frames += 1; - } - - draw(context); + elapsed_ticks -= ticks_per_frame; + float timestep = 1.0 / LOGICAL_FPS; + real_time += timestep; + timestep *= speed; + game_time += timestep; + + process_events(); + update_gamelogic(timestep); + frames += 1; } - sound_manager->update(); + draw(context); - SDL_Delay(0); + sound_manager->update(); } }