windows: Provide a time_monotonic() based on GetTickCount64()

This commit is contained in:
Martin Willi
2014-06-04 15:53:01 +02:00
parent 965e846cc3
commit 4de7401a98
+21
View File
@@ -15,6 +15,13 @@
*/ */
#define _GNU_SOURCE /* for memrchr */ #define _GNU_SOURCE /* for memrchr */
#ifdef WIN32
/* for GetTickCount64, Windows 7 */
# define _WIN32_WINNT 0x0601
#endif
#include "utils.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
@@ -441,6 +448,19 @@ void closefrom(int lowfd)
*/ */
time_t time_monotonic(timeval_t *tv) time_t time_monotonic(timeval_t *tv)
{ {
#ifdef WIN32
ULONGLONG ms;
time_t s;
ms = GetTickCount64();
s = ms / 1000;
if (tv)
{
tv->tv_sec = s;
tv->tv_usec = (ms - (s * 1000)) * 1000;
}
return s;
#else /* !WIN32 */
#if defined(HAVE_CLOCK_GETTIME) && \ #if defined(HAVE_CLOCK_GETTIME) && \
(defined(HAVE_CONDATTR_CLOCK_MONOTONIC) || \ (defined(HAVE_CONDATTR_CLOCK_MONOTONIC) || \
defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC)) defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
@@ -472,6 +492,7 @@ time_t time_monotonic(timeval_t *tv)
return -1; return -1;
} }
return tv->tv_sec; return tv->tv_sec;
#endif /* !WIN32 */
} }
/** /**