windows下C语言获取精确到毫秒的时间的几个接口的测试

来源:互联网 发布:华为认证云计算 编辑:程序博客网 时间:2024/06/04 18:59

本文中使用的源代码转自: 《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,也属于正常误差。

看来以后就用这两个了。

如有错漏,欢迎指正。

0 0