// For windows implementation of "gettimeofday"
#if defined(_WIN32) || defined(WIN32)
#include <time.h>
#include <windows.h> //I've ommited this line.
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
#else
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
#endif
struct timezone
{
int tz_minuteswest; /* minutes W of Greenwich */
int tz_dsttime; /* type of dst correction */
};
__inline static
int gettimeofday(struct timeval* tv, struct timezone* tz)
{
FILETIME f = { 0 };
static char _tz = 0x00;
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
unsigned long long u = 0Ui64;
#else
unsigned long long u = 0ULL;
#endif
if (tv)
{
#ifdef _WIN32_WCE
SYSTEMTIME s = { 0 };
::GetSystemTime(&s);
::SystemTimeToFileTime(&s, &f);
#else
::GetSystemTimeAsFileTime(&f);
#endif
u |= f.dwHighDateTime;
u <<= 32;
u |= f.dwLowDateTime;
//convert into microseconds
u /= 10;
//converting file time to unix epoch
u -= DELTA_EPOCH_IN_MICROSECS;
tv->tv_sec = (long)(u / 1000000UL);
tv->tv_usec = (long)(u % 1000000UL);
}
if (tz)
{
if (_tz == 0x00)
{
_tzset();
_tz=0x01;
}
tz->tz_minuteswest = _timezone / 60;
tz->tz_dsttime = _daylight;
}
return 0;
}
#endif