From 0d31a4afb600e1ad9b911ad4d024699073f9f067 Mon Sep 17 00:00:00 2001 From: Felipe Jorge Date: Mon, 14 Jul 2025 00:03:38 -0300 Subject: [PATCH] Win32: Make wait events timeout more consistent --- src/win32_init.c | 10 ++++++++++ src/win32_platform.h | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/win32_init.c b/src/win32_init.c index 6b6e9d08..8a09495c 100644 --- a/src/win32_init.c +++ b/src/win32_init.c @@ -163,6 +163,13 @@ static GLFWbool loadLibraries(void) _glfwPlatformGetModuleSymbol(_glfw.win32.ntdll.instance, "RtlVerifyVersionInfo"); } + _glfw.win32.winmm.instance = _glfwPlatformLoadModule("winmm.dll"); + if (_glfw.win32.winmm.instance) + { + _glfw.win32.winmm.timeBeginPeriod_ = (PFN_timeBeginPeriod) _glfwPlatformGetModuleSymbol(_glfw.win32.winmm.instance, "timeBeginPeriod"); + _glfw.win32.winmm.timeBeginPeriod_(1); + } + return GLFW_TRUE; } @@ -187,6 +194,9 @@ static void freeLibraries(void) if (_glfw.win32.ntdll.instance) _glfwPlatformFreeModule(_glfw.win32.ntdll.instance); + + if (_glfw.win32.winmm.instance) + _glfwPlatformFreeModule(_glfw.win32.winmm.instance); } // Create key code translation tables diff --git a/src/win32_platform.h b/src/win32_platform.h index 49cceba6..d2612e20 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -258,6 +258,9 @@ typedef HRESULT (WINAPI * PFN_GetDpiForMonitor)(HMONITOR,MONITOR_DPI_TYPE,UINT*, typedef LONG (WINAPI * PFN_RtlVerifyVersionInfo)(OSVERSIONINFOEXW*,ULONG,ULONGLONG); #define RtlVerifyVersionInfo _glfw.win32.ntdll.RtlVerifyVersionInfo_ +// winmm.dll function pointer typedefs +typedef UINT (WINAPI * PFN_timeBeginPeriod)(UINT); + // WGL extension pointer typedefs typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC)(int); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC,int,int,UINT,const int*,int*); @@ -442,6 +445,11 @@ typedef struct _GLFWlibraryWin32 HINSTANCE instance; PFN_RtlVerifyVersionInfo RtlVerifyVersionInfo_; } ntdll; + + struct { + HINSTANCE instance; + PFN_timeBeginPeriod timeBeginPeriod_; + } winmm; } _GLFWlibraryWin32; // Win32-specific per-monitor data