C++ MFC/Win32中的定时器消息

C++ MFC/Win32中的定时器消息,c++,winapi,mfc,C++,Winapi,Mfc,我只是在Win32中尝试SetTimer方法,使用一些较低的值,例如10ms作为超时时间。我计算了获得500个计时器事件所需的时间,预计大约为5秒。令人惊讶的是,我发现获得这么多事件大约需要7.5秒,这意味着它在16毫秒左右超时。我们可以为超时时间设置的值是否有任何限制(我在MSDN上找不到任何内容)?此外,我的系统中运行的其他进程是否会影响这些计时器消息?OnTimer基于WM\u timer消息,这是一个低消息优先级,意味着只有在没有其他消息等待时才会发送 MSDN还解释说,您不能将间隔设置

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

OnTimer基于
WM\u timer
消息,这是一个低消息优先级,意味着只有在没有其他消息等待时才会发送

MSDN还解释说,您不能将间隔设置为小于
用户计时器\u最小值
,即10


不管怎样,调度程序都会尊重时间量

OnTimer基于
WM\u TIMER
消息,这是一个低消息优先级,意味着只有在没有其他消息等待时才会发送

MSDN还解释说,您不能将间隔设置为小于
用户计时器\u最小值
,即10


不管怎样,调度程序都会尊重时间量

Windows不是实时操作系统,无法处理这种精度(10毫秒间隔)。话虽如此,有些操作系统的精度比其他操作系统高。

Windows不是实时操作系统,无法处理这种精度(10毫秒间隔)。话虽如此,但有些计时器的精度比其他计时器高。

您可以将系统计时器的粒度更改为1ms-这是用于MIDI工作的


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

您可以将系统计时器的粒度更改为1ms-这是用于MIDI工作的


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

如上所述-windows不是实时操作系统。要求它做任何事情,并在以后的某个特定时间期待它是一件愚蠢的差事。设置计时器要求windows在时间尽可能快地过去后立即触发WM_计时器事件。这可能是在处理和完成其他线程之后。因此,查看WM_定时器事件的实际时间无法实际预测-您所知道的只是>您设置的时间。。。。

如上所述-windows不是实时操作系统。要求它做任何事情,并在以后的某个特定时间期待它是一件愚蠢的差事。设置计时器要求windows在时间尽可能快地过去后立即触发WM_计时器事件。这可能是在处理和完成其他线程之后。因此,查看WM_定时器事件的实际时间无法实际预测-您所知道的只是>您设置的时间。。。。