【问题标题】:How does Windows accumulate WM_TIMER messages?Windows 如何累积 WM_TIMER 消息?
【发布时间】:2019-07-18 15:36:17
【问题描述】:

据我了解,InvalidateRect 之类的函数被调用时不会生成 WM_PAINT 消息;而是一个对象,可以被认为是一个包含有关 dirty 区域的一些信息的标志,当队列中的其他消息被处理时,会生成一个 WM_PAINT 消息,它结合了自上次成功的WM_PAINT 消息以来所有标志的区域。据推测,每个与特定线程关联的 HWND 都会执行一次

我想知道WM_TIMER 消息是如何累积的?我想也许只会保留每个线程的最新标志,但是如果不同的 TIMERPROC 和窗口句柄有不同的计时器怎么办。如果两个间隔不同的SetTimer调用指向同一个窗口句柄怎么办;是否会为每个计时器 ID 生成一个WM_TIMER

【问题讨论】:

标签: winapi timer message-queue windows-messages


【解决方案1】:

如果两个不同间隔的 SetTimer 调用指向同一个窗口句柄怎么办;是否会为每个定时器 ID 生成一个 WM_TIMER?

是的,每个不同的计时器都会生成一条消息。

您明确声明“具有不同的间隔”。但这不是一个因素。重要的是计时器标识,由计时器 ID 定义。您可以有多个具有相同间隔的不同计时器。

如果消息队列没有像逻辑生成的事件那样频繁地提供服务,那么计时器事件可能会合并。因此,如果在调用泵送消息之间经过了多个计时器间隔,则只会生成一个计时器消息。不要将计时器事件视为指示计时器已经过去了多少,而是将它们视为指示至少指定的时间间隔已经过去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多