diff --git a/gral_windows.cpp b/gral_windows.cpp index d0e4c9e..6fa0625 100644 --- a/gral_windows.cpp +++ b/gral_windows.cpp @@ -1064,16 +1064,26 @@ void gral_window_clipboard_paste(gral_window *window, void (*callback)(char cons CloseClipboard(); } +static void CALLBACK timer_callback(LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue) { + gral_timer *timer = (gral_timer *)lpArgToCompletionRoutine; + timer->callback(timer->user_data); +} + gral_timer *gral_window_create_timer(gral_window *window, int milliseconds, void (*callback)(void *user_data), void *user_data) { gral_timer *timer = new gral_timer(); timer->callback = callback; timer->user_data = user_data; - SetTimer((HWND)window, (UINT_PTR)timer, milliseconds, NULL); + //SetTimer((HWND)window, (UINT_PTR)timer, milliseconds, NULL); + HANDLE handle = CreateWaitableTimer(NULL, FALSE, NULL); + LARGE_INTEGER due_time; + due_time.QuadPart = milliseconds * -10000; + SetWaitableTimer(handle, &due_time, milliseconds, timer_callback, timer, FALSE); return timer; } void gral_window_delete_timer(gral_window *window, gral_timer *timer) { - KillTimer((HWND)window, (UINT_PTR)timer); + //KillTimer((HWND)window, (UINT_PTR)timer); + //CancelWaitableTimer((HWND)timer); delete timer; }