microsleep.h 878 B

12345678910111213141516171819202122232425262728293031
  1. #pragma once
  2. #ifndef MICROSLEEP_H
  3. #define MICROSLEEP_H
  4. #include "os.h"
  5. #include "inline_keywords.h"
  6. // todo: removed
  7. #if !defined(IS_WINDOWS)
  8. /* Make sure nanosleep gets defined even when using C89. */
  9. #if !defined(__USE_POSIX199309) || !__USE_POSIX199309
  10. #define __USE_POSIX199309 1
  11. #endif
  12. #include <time.h> /* For nanosleep() */
  13. #endif
  14. /* A more widely supported alternative to usleep(), based on Sleep() in Windows and nanosleep() */
  15. H_INLINE void microsleep(double milliseconds) {
  16. #if defined(IS_WINDOWS)
  17. Sleep((DWORD)milliseconds); /* (Unfortunately truncated to a 32-bit integer.) */
  18. #else
  19. /* Technically, nanosleep() is not an ANSI function */
  20. struct timespec sleepytime;
  21. sleepytime.tv_sec = milliseconds / 1000;
  22. sleepytime.tv_nsec = (milliseconds - (sleepytime.tv_sec * 1000)) * 1000000;
  23. nanosleep(&sleepytime, NULL);
  24. #endif
  25. }
  26. #endif /* MICROSLEEP_H */