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