From c11d30bafef2b0a7836815dc914a2725c726068a Mon Sep 17 00:00:00 2001 From: flashback-fx Date: Mon, 6 Jun 2022 20:18:37 +0200 Subject: [PATCH] Change WaitTime argument from milliseconds to seconds (#2506) --- src/raylib.h | 2 +- src/rcore.c | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/raylib.h b/src/raylib.h index 8379c343d..3fcf66b38 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -958,7 +958,7 @@ RLAPI void DisableEventWaiting(void); // Disable wai // To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing) RLAPI void PollInputEvents(void); // Register all input events -RLAPI void WaitTime(float ms); // Wait for some milliseconds (halt program execution) +RLAPI void WaitTime(double waitSeconds); // Wait for some time (halt program execution) // Cursor-related functions RLAPI void ShowCursor(void); // Shows cursor diff --git a/src/rcore.c b/src/rcore.c index 4acb6988c..259b607c7 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -2109,7 +2109,7 @@ void EndDrawing(void) // Wait for some milliseconds... if (CORE.Time.frame < CORE.Time.target) { - WaitTime((float)(CORE.Time.target - CORE.Time.frame)*1000.0f); + WaitTime(CORE.Time.target - CORE.Time.frame); CORE.Time.current = GetTime(); double waitTime = CORE.Time.current - CORE.Time.previous; @@ -4819,46 +4819,47 @@ static void InitTimer(void) CORE.Time.previous = GetTime(); // Get time as double } -// Wait for some milliseconds (stop program execution) +// Wait for some time (stop program execution) // NOTE: Sleep() granularity could be around 10 ms, it means, Sleep() could // take longer than expected... for that reason we use the busy wait loop // Ref: http://stackoverflow.com/questions/43057578/c-programming-win32-games-sleep-taking-longer-than-expected // Ref: http://www.geisswerks.com/ryan/FAQS/timing.html --> All about timming on Win32! -void WaitTime(float ms) +void WaitTime(double waitSeconds) { #if defined(SUPPORT_BUSY_WAIT_LOOP) double previousTime = GetTime(); double currentTime = 0.0; // Busy wait loop - while ((currentTime - previousTime) < ms/1000.0f) currentTime = GetTime(); + while ((currentTime - previousTime) < waitSeconds) currentTime = GetTime(); #else #if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP) - double destTime = GetTime() + ms/1000.0f; - double busyWait = ms*0.05; // NOTE: We are using a busy wait of 5% of the time - ms -= (float)busyWait; + double destinationTime = GetTime() + waitSeconds; + double sleepSeconds = waitSeconds - waitSeconds*0.05; // NOTE: We reserve a percentage of the time for busy waiting + #else + double sleepSeconds = waitSeconds; #endif // System halt functions #if defined(_WIN32) - Sleep((unsigned int)ms); + Sleep((unsigned int)sleepSeconds*1000.0); #endif #if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__EMSCRIPTEN__) struct timespec req = { 0 }; - time_t sec = (int)(ms/1000.0f); - ms -= (sec*1000); + time_t sec = sleepSeconds; + long nsec = (sleepSeconds - sec)*1000000000L; req.tv_sec = sec; - req.tv_nsec = ms*1000000L; + req.tv_nsec = nsec; // NOTE: Use nanosleep() on Unix platforms... usleep() it's deprecated. while (nanosleep(&req, &req) == -1) continue; #endif #if defined(__APPLE__) - usleep(ms*1000.0f); + usleep(sleepSeconds*1000000.0); #endif #if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP) - while (GetTime() < destTime) { } + while (GetTime() < destinationTime) { } #endif #endif } @@ -6452,7 +6453,7 @@ static void *EventThread(void *arg) #endif } - WaitTime(5); // Sleep for 5ms to avoid hogging CPU time + WaitTime(0.005); // Sleep for 5ms to avoid hogging CPU time } close(worker->fd); @@ -6540,7 +6541,7 @@ static void *GamepadThread(void *arg) } } } - else WaitTime(1); // Sleep for 1 ms to avoid hogging CPU time + else WaitTime(0.001); // Sleep for 1 ms to avoid hogging CPU time } }