#ifndef KIT_TIME_H #define KIT_TIME_H #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif #include #ifdef __cplusplus extern "C" { #endif #ifndef TIME_UTC # define TIME_UTC 1 #endif #ifdef KIT_REQUIRE_TIMESPEC_GET # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN 1 # endif # ifndef NOMINMAX # define NOMINMAX 1 # endif # include # define KIT_TIMESPEC_IMPL_UNIX_EPOCH_IN_TICKS 116444736000000000ull # define KIT_TIMESPEC_IMPL_TICKS_PER_SECONDS 10000000ull static int timespec_get(struct timespec *ts, int base) { if (ts == NULL || base != TIME_UTC) return 0; FILETIME ft; ULARGE_INTEGER date; LONGLONG ticks; GetSystemTimeAsFileTime(&ft); date.HighPart = ft.dwHighDateTime; date.LowPart = ft.dwLowDateTime; ticks = (LONGLONG) (date.QuadPart - KIT_TIMESPEC_IMPL_UNIX_EPOCH_IN_TICKS); ts->tv_sec = ticks / KIT_TIMESPEC_IMPL_TICKS_PER_SECONDS; ts->tv_nsec = (ticks % KIT_TIMESPEC_IMPL_TICKS_PER_SECONDS) * 100; return base; } #endif #ifdef __cplusplus } #endif #endif