summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorflashback-fx <[email protected]>2022-06-06 20:18:37 +0200
committerGitHub <[email protected]>2022-06-06 20:18:37 +0200
commitc11d30bafef2b0a7836815dc914a2725c726068a (patch)
tree4c844c3f85b326ccfde58b75ac5e6d4994837d60 /src
parent609d92003beca6522845d001b3d4f707b72aaba1 (diff)
downloadraylib-c11d30bafef2b0a7836815dc914a2725c726068a.tar.gz
raylib-c11d30bafef2b0a7836815dc914a2725c726068a.zip
Change WaitTime argument from milliseconds to seconds (#2506)
Diffstat (limited to 'src')
-rw-r--r--src/raylib.h2
-rw-r--r--src/rcore.c31
2 files changed, 17 insertions, 16 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 8379c343..3fcf66b3 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 4acb6988..259b607c 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
}
}