-
-
Save Youka/4153f12cf2e17a77314c to your computer and use it in GitHub Desktop.
| #include <windows.h> /* WinAPI */ | |
| /* Windows sleep in 100ns units */ | |
| BOOLEAN nanosleep(LONGLONG ns){ | |
| /* Declarations */ | |
| HANDLE timer; /* Timer handle */ | |
| LARGE_INTEGER li; /* Time defintion */ | |
| /* Create timer */ | |
| if(!(timer = CreateWaitableTimer(NULL, TRUE, NULL))) | |
| return FALSE; | |
| /* Set timer properties */ | |
| li.QuadPart = -ns; | |
| if(!SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE)){ | |
| CloseHandle(timer); | |
| return FALSE; | |
| } | |
| /* Start & wait for timer */ | |
| WaitForSingleObject(timer, INFINITE); | |
| /* Clean resources */ | |
| CloseHandle(timer); | |
| /* Slept without problems */ | |
| return TRUE; | |
| } |
Thanks alot!
I don't think this is quite correct. The value passed to SetWaitableTimer should have units of 100ns. See Using Waitable Timer Objects.
For Windows versions 2004 and after, use CREATE_WAITABLE_TIMER_HIGH_RESOLUTION. See Windows Timer Resolution: The Great Rule Change
@gbburkhardt Thanks for the update! "The Great Rule Change" was easy to miss.
This solution works like a charm for me. Thanks! Also note that this solution has been posted here: https://stackoverflow.com/a/41862592/11550178. Actually, this is an official solution extracted from here: https://learn.microsoft.com/en-us/windows/win32/sync/using-waitable-timer-objects.
This solution works like a charm for me. Thanks! Also note that this solution has been posted here: https://stackoverflow.com/a/41862592/11550178. Actually, this is an official solution extracted from here: https://learn.microsoft.com/en-us/windows/win32/sync/using-waitable-timer-objects.
Show me the timings please so I know
Awesome