MFC / Win32中的定时器消息

时间:2009-04-07 17:08:59

标签: c++ winapi mfc

我只是在Win32中使用一些低值(如10ms作为超时时间)尝试SetTimer方法。我计算了获得500个计时器事件所需的时间,并预计它将在5秒左右。令人惊讶的是,我发现这需要大约7.5秒才能获得这么多事件,这意味着它可以在大约16ms时超时。我们可以为超时时间设置的值是否有任何限制(我在MSDN上找不到任何内容)?此外,我系统中运行的其他进程是否会影响这些计时器消息?

4 个答案:

答案 0 :(得分:5)

OnTimer基于WM_TIMER消息,这是一个低消息优先级,这意味着它将仅在没有其他消息等待时发送。

MSDN还解释说,您不能设置小于USER_TIMER_MINIMUM的间隔,即10。

无论如何,调度程序都会遵守时间量。

答案 1 :(得分:3)

Windows不是实时操作系统,无法处理这种精度(10毫秒间隔)。话虽如此,there are multiple kinds of timers有些人比其他人有更好的精确度。

答案 2 :(得分:1)

您可以将系统计时器的粒度更改为1毫秒 - 这适用于MIDI工作。

基本上,我在w2k上的经验是,任何请求的等待时间在13ms以下都会返回一个等待,它在两个值0ms和13ms之间随机振荡。比这更长的计时器通常非常准确。你的500个计时器事件 - 有些是0毫秒,有些是13毫秒(假设13毫秒仍然是正确的)。你最终得到了时间短缺。

答案 3 :(得分:0)

如上所述 - Windows不是实时操作系统。要求它做任何事情,并在以后的特定时间期待它是一个愚蠢的差事。设置一个计时器会很好地询问窗口,以便在时间过后尽快触发WM_TIMER事件。这可能是在处理完其他线程之后。因此,无法真实地预测看到WM_TIMER事件的实际时间 - 所有你知道的是它>你设置的时间.... Checkout this article on windows time