本文中使用的源代码转自: 《C语言如何获得精确到毫秒的时间》,有改动。
首先感谢那位作者,提供了很多信息。
直接上代码
#include <windows.h>
#include <stdio.h>
#include <time.h>
int main() {
{
DWORD start, stop;
start = GetTickCount();
Sleep(3000);
stop = GetTickCount();
printf("GetTickCount: %lu ms\n", stop - start);
}
{
LARGE_INTEGER li;
LONGLONG start, end, freq;
QueryPerformanceFrequency(&li);
freq = li.QuadPart;
QueryPerformanceCounter(&li);
start = li.QuadPart;
Sleep(3000);
QueryPerformanceCounter(&li);
end = li.QuadPart;
int useTime =(int)((end - start) * 1000 / freq);
printf("QueryPerformanceX: %d ms\n", useTime);
}
{
SYSTEMTIME t1, t2;
GetSystemTime(&t1);
Sleep(3000);
GetSystemTime(&t2);
printf("GetSystemTime: %u ms\n", ((t2.wMinute - t1.wMinute) * 60 +
t2.wSecond - t1.wSecond) * 1000 + t2.wMilliseconds - t1.wMilliseconds);
}
{
int t1, t2;
t1 = clock();
Sleep(3000);
t2 = clock();
printf("clock: %d ms\n", t2 - t1);
}
return 0;
}
使用了花括号来让一些同名变量变成互不干扰的局部变量,不必在意。
运行环境:三代I3 win7 x64
运行结果:GetTickCount接口比较诡异,得到结果几乎总是2995或者3011;QueryPerformanceX接口则经常少了几ms,大概在2993~3000;GetSystemTime接口和clock接口则很准确,只有一次出现了3001,也属于正常误差。
看来以后就用这两个了。
如有错漏,欢迎指正。