首页 > 解决方案 > C++ Windows 窗体应用程序中的 QueryPerformanceCounter 用法

问题描述

我正在尝试使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 计时器,以便在我的 Windows 窗体 GUI (Visual C++) 中获得高分辨率时间戳。我这边的问题是我不知道在表单中使用它的确切方法。

我发现的示例清楚地描述了 StartCounter() 和 GetCounter() 但我想知道如何使用 MyForm.h 中的 button_Click 回调函数调用它

目标是在 GUI 中按下按钮后定期发送消息。

你能在这个问题上支持我吗?谢谢!

    double PCFreq = 0.0;
__int64 CounterStart = 0;
double vartest = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    //if (!QueryPerformanceFrequency(&li))

        PCFreq = double(li.QuadPart);

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

标签: c++performancetimetimerperformancecounter

解决方案


正如我在评论中建议的那样,如果目标是在表单应用程序的主线程上定期执行某些操作,则您希望使用 .NET 中的 Timer 类或 Win32 SetTimer 函数来安排在给定时间间隔发生的回调。

QueryPerformanceCounter 可能比您需要的更精确。相反,使用GetTickCount64来获取系统时间的毫秒计数器。

ULONGLONG CounterStart = 0;

void StartCounter()
{
    CounterStart = GetTickCount64();
}

double GetCounter()
{
    ULONGLONG currentTime = GetTickCount64();
    ULONGLONG diff = currentTime - CounterStart;
    return (diff / 1000.0);  // convert milliseconds to seconds as a double
}

推荐阅读