+
+ s_iDrawCount++;
+}
+
+int startUpdateThread(void*)
+{
+ updatesInit();
+
+ s_micLastSecond = s_timer.query();
+
+ while(s_bIsRunning)
+ {
+ Timer timer;
+ timer.init();
+ handleInput();
+ update(s_fGameStep);
+
+ updateFPSCounters();
+ const Ticks ticks = timer.query();
+ timer.fini();
+
+ float wait = (1000000.0 / s_iTargetUPS - ticks.microseconds());
+ s_fAccUpdateWait += 0 < wait ? wait : 0;
+
+ if(s_iMinWaitMicro < s_fAccUpdateWait)
+ {
+ int iWaits = (int)(s_fAccUpdateWait / s_iMinWaitMicro);
+ s_fAccUpdateWait -= iWaits * s_iMinWaitMicro;
+ SDL_Delay(iWaits * s_iMinWaitMilli);
+ }
+ }
+
+ updatesClean();
+
+ return 0;
+}
+
+int startDrawThread(void*)
+{
+ drawInit();
+
+ while(s_bIsRunning)
+ {
+ Timer timer;
+ timer.init();
+ draw();
+ const Ticks ticks = timer.query();
+ timer.fini();
+
+ float wait = (1000000.0 / s_iTargetFPS - ticks.microseconds());
+ s_fAccDrawWait += 0 < wait ? wait : 0;
+
+ if(s_iMinWaitMicro < s_fAccDrawWait)
+ {
+ int iWaits = (int)(s_fAccDrawWait / s_iMinWaitMicro);
+ s_fAccDrawWait -= iWaits * s_iMinWaitMicro;
+ SDL_Delay(iWaits * s_iMinWaitMilli);
+ }
+ }
+
+ drawClean();
+
+ return 0;