可能重复:
measuring time with resolution of microseconds in c++?
您好,
有没有一种简单的方法可以在Windows机器上获得系统时间,精确到微秒?
答案 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中为您提供所需的内容。