首页 >后端开发 >C++ >如何在 Windows 中使用 QueryPerformanceCounter 准确测量经过的时间?

如何在 Windows 中使用 QueryPerformanceCounter 准确测量经过的时间?

Linda Hamilton
Linda Hamilton原创
2024-12-14 18:03:12549浏览

How Can I Accurately Measure Elapsed Time Using QueryPerformanceCounter in Windows?

如何使用 QueryPerformanceCounter 确定经过的时间

QueryPerformanceCounter 是适用于 Windows 系统的高分辨率性能计数器 API,可实现精确的计时测量。要实现它,请按照以下步骤操作:

  1. 包含必要的标头:

    #include <windows.h>
  2. 定义性能柜台变量:

    • PCFreq:用于存储计数器频率(以毫秒为单位)的双精度变量。
    • CounterStart:用于存储起始计数器值的整数变量。
  3. 实现 StartCounter功能:

    • 使用 QueryPerformanceFrequency 获取以赫兹为单位的性能计数器频率。
    • 将频率转换为毫秒。
    • 使用以下命令获取起始计数器值QueryPerformanceCounter.
  4. 实现 GetCounter 函数:

    • 使用 QueryPerformanceCounter 获取当前计数器值。
    • 减去起始计数器值即可得到经过的时间毫秒。
    • 将经过的时间转换为所需的单位(例如秒、微秒)。
  5. 用法示例:

    • 调用StartCounter()初始化性能计数器。
    • 使用 Sleep 或类似的函数来等待特定的持续时间。
    • 调用 GetCounter() 来检索经过的时间。

代码代码片段:

double PCFreq = 0.0;
__int64 CounterStart = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    if (!QueryPerformanceFrequency(&li))
        cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart) / 1000.0;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}

double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart - CounterStart) / PCFreq;
}

int main()
{
    StartCounter();
    Sleep(1000);
    cout << GetCounter() << "\n";
    return 0;
}

此代码片段输出接近 1000 的值,演示了如何使用 QueryPerformanceCounter 进行精确的计时测量。

以上是如何在 Windows 中使用 QueryPerformanceCounter 准确测量经过的时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn