Browse Source

Change WaitTime argument from milliseconds to seconds (#2506)

flashback-fx 3 years ago
parent
commit
c11d30bafe
2 changed files with 17 additions and 16 deletions
  1. 1 1
      src/raylib.h
  2. 16 15
      src/rcore.c

+ 1 - 1
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

+ 16 - 15
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
         }
     }