首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Windows 計算毫秒級時間差:GetTickCount 缺陷與高精度替代方案

     編輯:C++ 入門

Windows 計算毫秒級時間差:GetTickCount 缺陷與高精度替代方案

GetTickCount() 精度僅 ~15ms(系統時鐘中斷周期),無法滿足毫秒級計時需求。本文對比三種方案:clock()、GetTickCountCalibrate()(系統時間校準)、QueryPerformanceCounter(高精度計數器),並給出測試數據。

方案對比測試

每隔 50ms 采樣 1000 次,統計與理論值 50ms 的偏差:

方法最大偏差最小偏差平均偏差結論
GetTickCount13ms3ms5.08ms不可用
clock()2ms0ms0.004ms可用,但計算 CPU 時間
GetTickCountCalibrate1ms0ms0.003ms推薦,牆鐘時間,兼容 GetTickCount 接口

方案 1:clock() - CPU 時間

ULONG GetTickCountCalibrate() {
    static ULONG firstTick = 0;
    static LONGLONG firstTickMS = 0;
    SYSTEMTIME st; FILETIME ft;
    GetLocalTime(&st); SystemTimeToFileTime(&st, &ft);
    LARGE_INTEGER li; li.HighPart=ft.dwHighDateTime; li.LowPart=ft.dwLowDateTime;
    LONGLONG nowMS = li.QuadPart / 10000;
    if (!firstTick) firstTick = GetTickCount();
    if (!firstTickMS) firstTickMS = nowMS;
    return firstTick + (ULONG)(nowMS - firstTickMS);
}

優點:牆鐘時間、毫秒精度、返回類型兼容 GetTickCount、無需鏈接額外庫。缺點:首次調用較慢(系統調用)。

方案 3:QueryPerformanceCounter(最高精度)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved