#pragma once #ifndef MICROSLEEP_H #define MICROSLEEP_H #include "os.h" #include "inline_keywords.h" // todo: removed #if !defined(IS_WINDOWS) /* Make sure nanosleep gets defined even when using C89. */ #if !defined(__USE_POSIX199309) || !__USE_POSIX199309 #define __USE_POSIX199309 1 #endif #include /* For nanosleep() */ #endif /* A more widely supported alternative to usleep(), based on Sleep() in Windows and nanosleep() */ H_INLINE void microsleep(double milliseconds) { #if defined(IS_WINDOWS) Sleep((DWORD)milliseconds); /* (Unfortunately truncated to a 32-bit integer.) */ #else /* Technically, nanosleep() is not an ANSI function */ struct timespec sleepytime; sleepytime.tv_sec = milliseconds / 1000; sleepytime.tv_nsec = (milliseconds - (sleepytime.tv_sec * 1000)) * 1000000; nanosleep(&sleepytime, NULL); #endif } #endif /* MICROSLEEP_H */