Equivalent of gettimeday() for Windows

前端 未结 5 1450
星月不相逢
星月不相逢 2020-12-23 17:43

Does anyone know an equivalent function of the gettimeofday() function in Windows environment? I am comparing a code execution time in Linux vs Windows. I am us

5条回答
  •  盖世英雄少女心
    2020-12-23 18:25

    Nowadys I would use the following for gettimeofday() on Windows, which is using GetSystemTimePreciseAsFileTime() if compiled for Windows 8 or higher and GetSystemTimeAsFileTime() otherwise:

    #include 
    struct timezone {
        int tz_minuteswest;
        int tz_dsttime;
    };
    
    int gettimeofday(struct timeval *tv, struct timezone *tz)
    {
        if (tv) {
            FILETIME               filetime; /* 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 00:00 UTC */
            ULARGE_INTEGER         x;
            ULONGLONG              usec;
            static const ULONGLONG epoch_offset_us = 11644473600000000ULL; /* microseconds betweeen Jan 1,1601 and Jan 1,1970 */
    
    #if _WIN32_WINNT >= _WIN32_WINNT_WIN8
            GetSystemTimePreciseAsFileTime(&filetime);
    #else
            GetSystemTimeAsFileTime(&filetime);
    #endif
            x.LowPart =  filetime.dwLowDateTime;
            x.HighPart = filetime.dwHighDateTime;
            usec = x.QuadPart / 10  -  epoch_offset_us;
            tv->tv_sec  = (time_t)(usec / 1000000ULL);
            tv->tv_usec = (long)(usec % 1000000ULL);
        }
        if (tz) {
            TIME_ZONE_INFORMATION timezone;
            GetTimeZoneInformation(&timezone);
            tz->tz_minuteswest = timezone.Bias;
            tz->tz_dsttime = 0;
        }
        return 0;
    }
    

提交回复
热议问题