diff options
author | David Robillard <d@drobilla.net> | 2025-01-22 10:44:34 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2025-01-22 18:41:29 -0500 |
commit | 90b9b63b2001c4595c08f7da5aa4403611327678 (patch) | |
tree | 1474799c81c031cf8b7accfd7e0b80671f16fe05 | |
parent | 1025e874ad83b95c4f4e73bb6f966e9c80877bec (diff) | |
download | pugl-90b9b63b2001c4595c08f7da5aa4403611327678.tar.gz pugl-90b9b63b2001c4595c08f7da5aa4403611327678.tar.bz2 pugl-90b9b63b2001c4595c08f7da5aa4403611327678.zip |
Windows: Avoid waiting less than a millisecond
There is API to access the minimum timer resolution, but it seems to always be
1 millisecond, which is also the unit of the MsgWaitForMultipleObjects
parameter, so just avoid the fuss and hardcode this as the minimum.
This should slightly reduce overhead when the main loop is running without much
of a margin until the frame needs to be drawn.
-rw-r--r-- | src/win.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1137,16 +1137,18 @@ puglDispatchWinEvents(PuglWorld* world) PuglStatus puglUpdate(PuglWorld* world, double timeout) { + static const double minWaitSeconds = 0.002; + const double startTime = puglGetTime(world); PuglStatus st = PUGL_SUCCESS; if (timeout < 0.0) { st = puglPollWinEvents(world, timeout); st = st ? st : puglDispatchWinEvents(world); - } else if (timeout <= 0.001) { + } else if (timeout < minWaitSeconds) { st = puglDispatchWinEvents(world); } else { - const double endTime = startTime + timeout - 0.001; + const double endTime = startTime + timeout - minWaitSeconds; for (double t = startTime; t < endTime; t = puglGetTime(world)) { if ((st = puglPollWinEvents(world, endTime - t)) || (st = puglDispatchWinEvents(world))) { |