【问题标题】:Timer message in MFC/Win32MFC/Win32 中的定时器消息
【发布时间】:2010-10-18 02:56:08
【问题描述】:

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

【问题讨论】:

    标签: c++ winapi mfc


    【解决方案1】:

    OnTimer 基于WM_TIMER 消息,消息优先级较低,意味着只有在没有其他消息等待时才会发送。

    另外MSDN解释说不能设置小于USER_TIMER_MINIMUM的间隔,也就是10。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-12
            • 2011-06-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多