【发布时间】:2013-12-31 14:08:32
【问题描述】:
在 C++ 中,我可以使用 Windows 多媒体计时器在 毫秒 范围内定期调用函数,如下所示:
timeSetEvent(intPeriod_Milliseconds, 0, vidTimerCallback, ...., TIME_PERIODIC )
其中intPeriod_Milliseconds 是一个整数变量,所需周期以毫秒为单位。
如何让函数 vidTimerCallback 每 0.5 毫秒或微秒范围内被调用一次?
现在,我有这样的事情:
#include <windows.h>
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"; //It prints accurate time like 998
return 0;
}
但我无法进一步改进它以定期调用函数。 我使用 here 类有类似的情况。
另外,我有一些很好用的东西,但它适用于 C# 而不是 C++ (here)。
【问题讨论】:
-
@DavidHeffernan 我想我已经通过调用
timeSetEvent来做到这一点,它需要 毫秒 周期的 integer 输入。 -
抱歉,我正在查看您提供的不使用计时器的程序。
-
@MadScienceDreams 我发布了三个示例,告诉我有办法实现这一目标。
标签: c++ timer precision milliseconds period