///////////////////////////////////////////////////////////////////////////// // Name: win32.h // Author: Laurent Pugin // Created: 2016 // Copyright (c) Authors and others. All rights reserved. ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // NOTE: various additional includes for compilation under Windows // Copyright notices below ///////////////////////////////////////////////////////////////////////////// #ifndef __VRV_WIN32TIME_H__ #define __VRV_WIN32TIME_H__ // Avoid conflict between windows and std functions #define NOMINMAX namespace vrv { typedef struct timeval { long tv_sec; long tv_usec; } timeval; } #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include // portable: uint64_t MSVC: __int64 int gettimeofday(struct vrv::timeval * tp, struct timezone * tzp) { // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); SYSTEMTIME system_time; FILETIME file_time; uint64_t time; GetSystemTime( &system_time ); SystemTimeToFileTime( &system_time, &file_time ); time = ((uint64_t)file_time.dwLowDateTime ) ; time += ((uint64_t)file_time.dwHighDateTime) << 32; tp->tv_sec = (long) ((time - EPOCH) / 10000000L); tp->tv_usec = (long) (system_time.wMilliseconds * 1000); return 0; } #endif