可能重复:
测量时间与分辨率在微秒的C + +?
嗨,
有一个简单的方法,我可以得到一个Windows机器上的系统时间,精度达到微秒?
看看GetSystemTimeAsFileTime
它可以在0.1微秒或100纳秒内给出准确度。
请注意,这是与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
喜欢这个
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);
我们真正需要的是一个高分辨率的GetTickCount()
。 据我所知,这并不存在。
如果你愿意使用一种骇人的方式来解决这个问题(这可能只适用于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。