QueryPerformanceCounter在c++ Windows窗体应用程序中的使用



我试图使用QueryPerformanceCounter和queryperformancfrequency定时器,以便在我的Windows窗体GUI (Visual c++)中具有高分辨率时间戳。我这边的问题是,我不知道在表单中使用它的确切方法。

的例子,我发现是清楚地描述了StartCounter()和GetCounter(),但我想知道,如何调用它与一个button_Click回调函数在MyForm.h

目标是在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;
}

正如我在评论中建议的那样,如果目标是在表单应用程序的主线程上周期性地做一些事情,那么您需要使用。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
}

相关内容

最新更新