diff options
author | Angelo Mantellini <manangel@cisco.com> | 2019-02-05 08:50:26 +0100 |
---|---|---|
committer | Angelo Mantellini <manangel@cisco.com> | 2019-02-06 16:23:04 +0100 |
commit | 9f68541e0f55495d61dd9e583bec38740a247597 (patch) | |
tree | 55519e34159ac1eb691e080e4c1eab5b0e4847bd /libparc/parc/algol/parc_Clock.c | |
parent | b77148ddc3def71e6c412c3afb5f1c20be2d77cd (diff) |
[HICN-26] Windows compatibilty for libparc
Change-Id: I6ebff82a81a2bf42fa3bf210ff0e6e530ce21915
Signed-off-by: Angelo Mantellini <manangel@cisco.com>
Diffstat (limited to 'libparc/parc/algol/parc_Clock.c')
-rw-r--r--[-rwxr-xr-x] | libparc/parc/algol/parc_Clock.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/libparc/parc/algol/parc_Clock.c b/libparc/parc/algol/parc_Clock.c index 95cf74bc..58624fc9 100755..100644 --- a/libparc/parc/algol/parc_Clock.c +++ b/libparc/parc/algol/parc_Clock.c @@ -68,7 +68,7 @@ _counterClock_GetTimeval(const PARCClock *clock, struct timeval *output) uint64_t value = parcAtomicInteger_Uint64Increment(&cc->counter); // put 19 bits in the micro-seconds so it is never larger than 1E+6 - output->tv_sec = value >> 19; + output->tv_sec = (long) (value >> 19); output->tv_usec = value & 0x7FFFF; } @@ -94,6 +94,17 @@ parcClock_Counter(void) return clock; } +#ifdef _WIN32 +static int _clock_gettime(int value, struct timespec *spec) { + __int64 wintime; + GetSystemTimeAsFileTime((FILETIME *)&wintime); + wintime -= 116444736000000000i64; //1jan1601 to 1jan1970 + spec->tv_sec = wintime / 10000000i64; //seconds + spec->tv_nsec = wintime % 10000000i64 * 100; //nano-seconds + return 0; +} +#endif + // =========== // Wallclock @@ -105,6 +116,11 @@ _wallclock_GetTimeval(const PARCClock *dummy __attribute__((unused)), struct tim clock_gettime(CLOCK_REALTIME, &ts); output->tv_sec = ts.tv_sec; output->tv_usec = ts.tv_nsec / 1000; +#elif _WIN32 + struct timespec ts; + _clock_gettime(TIME_UTC, &ts); + output->tv_sec = (long)ts.tv_sec; + output->tv_usec = ts.tv_nsec / 1000; #else clock_serv_t clockService; mach_timespec_t mts; @@ -167,6 +183,11 @@ _monoclock_GetTimeval(const PARCClock *dummy __attribute__((unused)), struct tim clock_gettime(CLOCK_MONOTONIC_RAW, &ts); output->tv_sec = ts.tv_sec; output->tv_usec = ts.tv_nsec / 1000; +#elif _WIN32 + struct timespec ts; + _clock_gettime(TIME_UTC, &ts); + output->tv_sec = (long)ts.tv_sec; + output->tv_usec = ts.tv_nsec / 1000; #else clock_serv_t clockService; mach_timespec_t mts; |