14template <get_system_time_function_type GetSystemTimeFunction,
typename TimeSpecType>
18 typedef decltype(ts->tv_sec) time_type;
29 GetSystemTimeFunction(&system_time._filetime);
31 __time64_t const filetime_scale{10 * 1000 * 1000};
35 __time64_t const seconds {epoch_time / filetime_scale};
36 __time64_t const nanoseconds{epoch_time % filetime_scale * 100};
38 if (seconds >
static_cast<__time64_t>(time_traits::max_time_t))
43 ts->tv_sec =
static_cast<time_type
>(seconds);
44 ts->tv_nsec =
static_cast<long>(nanoseconds);
50 return common_timespec_get<__acrt_GetSystemTimePreciseAsFileTime>(ts,
base);
55 return common_timespec_get<__acrt_GetSystemTimePreciseAsFileTime>(ts,
base);
63template <
typename TimeType>
68 typename time_traits::timespec_type ts{};
83 ts.tv_sec =
static_cast<TimeType
>(-1);
#define _VALIDATE_RETURN(expr, errorcode, retexpr)
struct _FILETIME * LPFILETIME
__time64_t __cdecl _time64(__time64_t *const result)
static TimeType __cdecl common_time(TimeType *const result)
int __cdecl _timespec64_get(_timespec64 *const ts, int const base)
__time32_t __cdecl _time32(__time32_t *const result)
int __cdecl _timespec32_get(_timespec32 *const ts, int const base)
void(WINAPI *)(LPFILETIME) get_system_time_function_type