sch*_*tbi 9 c++ windows winapi real-time timer
我试着每1毫秒调用一次函数.问题是,我喜欢用windows做这个.所以我尝试了多媒体时间API.
资源
idTimer = timeSetEvent(
1,
0,
TimerProc,
0,
TIME_PERIODIC|TIME_CALLBACK_FUNCTION );
Run Code Online (Sandbox Code Playgroud)
我的结果是大部分时间1毫秒都没问题,但有时我会得到双倍期.看看1.95ms附近的小凹凸 多媒体时间图http://www.freeimagehosting.net/uploads/8b78f2fa6d.png
我的第一个想法是,也许我的方法运行时间太长了.但我已经测量过了,情况并非如此.
我的下一个尝试是使用queud计时器API
hTimerQueue = CreateTimerQueue();
if(hTimerQueue == NULL)
{
printf("Error creating queue: 0x%x\n", GetLastError());
}
BOOL res = CreateTimerQueueTimer(
&hTimer,
hTimerQueue,
TimerProc,
NULL,
0,
1, // 1ms
WT_EXECUTEDEFAULT);
Run Code Online (Sandbox Code Playgroud)
但结果也不如预期.现在我大部分时间都是2毫秒的周期时间. queuedTimer http://www.freeimagehosting.net/uploads/2a46259a15.png
为了测量时间,我使用了QueryPerformanceCounter和QueryPerformanceFrequency方法.
所以现在我的问题是,如果有人在Windows下遇到类似的问题,甚至可能找到解决方案?
谢谢.
无需进入实时操作系统,您不能期望每 1 ms 调用一次函数.
在不是实时操作系统的Windows上(对于Linux来说,它是类似的),一个以微秒精度重复读取当前时间并在直方图中存储连续差异的程序具有超过10毫秒的非空容器!这意味着有时您将有2毫秒,但您也可以在通话之间获得更多.
| 归档时间: |
|
| 查看次数: |
5786 次 |
| 最近记录: |