【问题标题】:QueryPerformanceCounter usage in a C++ Windows form applicationC++ Windows 窗体应用程序中的 QueryPerformanceCounter 用法
【发布时间】:2021-05-19 03:32:55
【问题描述】:

我正在尝试使用 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++ performance time timer performancecounter


【解决方案1】:

正如我在 cmets 中所建议的,如果目标是在表单应用程序的主线程上定期执行某些操作,您希望使用 .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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多