C在Windows上获得微秒精度的系统时间?

时间:2010-12-31 05:13:08

标签: c++ c windows

  

可能重复:
  measuring time with resolution of microseconds in c++?

您好,

有没有一种简单的方法可以在Windows机器上获得系统时间,精确到微秒?

3 个答案:

答案 0 :(得分:10)

查看GetSystemTimeAsFileTime

它可以提供0.1微秒或100纳秒的精确度。

请注意,它的Epoch与POSIX Epoch不同。

所以要获得需要的微秒时间的POSIX时间:

    FILETIME ft;
    GetSystemTimeAsFileTime(&ft);
    unsigned long long tt = ft.dwHighDateTime;
    tt <<=32;
    tt |= ft.dwLowDateTime;
    tt /=10;
    tt -= 11644473600000000ULL;

所以在这种情况下time(0) == tt / 1000000

答案 1 :(得分:4)

喜欢这个

unsigned __int64 freq;
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
double timerFrequency = (1.0/freq);

unsigned __int64 startTime;
QueryPerformanceCounter((LARGE_INTEGER *)&startTime);

//do something...

unsigned __int64 endTime;
QueryPerformanceCounter((LARGE_INTEGER *)&endTime);
double timeDifferenceInMilliseconds = ((endTime-startTime) * timerFrequency);

答案 2 :(得分:0)

我们真正需要的是高分辨率GetTickCount()。据我所知,这并不存在。

如果您愿意使用hackish方式解决此问题(可能只适用于某些版本的Windows,如XP),请查看ReactOS。然后尝试以下代码:

long long GetTickCount64()
{
    return (long long)
        ((((unsigned long long)*(unsigned long int*)0x7FFE0000
           * (unsigned long long)*(unsigned long int*)0x7FFE0004)
         * (unsigned long long)10000) >> 0x18);
}

调整它可能会在某些版本的Windows中为您提供所需的内容。