WM_TIMER
The WM_TIMER message is posted to the installing thread's message queue when a timer expires.
The message is posted by the GetMessage or PeekMessage function.
A window receives this message through its WindowProc function.
模式对话框都有自己的消息循环,它阻塞的是原始的消息循环,但是被对话框的消息循环接替。
消息循环的本质是调用窗口过程,进一步调用你的各种消息响应函数,所以无论有多少个消息循环存在,只要有一个消息循环有效,所有的消息响应函数都能被调用,这也是为什么主窗口还能响应消息的缘故。多个消息循环的存在会产生某些副作用,比如消息重入,第一次消息响应时弹出一个模式对话框,模式对话框的消息循环2取代原始消息循环1,假设此时主窗口消息队列里又有一个同样的消息到来,消息循环2也会调用同样的窗口过程(响应函数),此时就能导致消息重入(因为第一次进入这个处理函数还没有返回,本质上这个响应函数被递归调用了),这也是能弹出多个模式对话框的原因。
每个模式对话框都有自己的消息循环,只有最后一个弹出对话框的消息循环才是活动的消息循环,其它所有消息循环(包括主窗口、之前弹出的模式对话框)全被阻塞。这里的“阻塞”并不是消息被阻塞,而只是DispatchMessage一直没有返回而已,但是其它的消息循环会接替这些工作。
WM_TIMER消息在计时器到期时会被发送到安装线程的消息队列中,由GetMessage或PeekMessage函数发布。当窗口通过其WindowProc函数接收此消息时,消息循环的本质是调用窗口过程及响应函数。尽管多个消息循环共存,只要其中一个有效,所有响应函数都能被调用。然而,这可能导致消息重入问题,特别是在模式对话框中,最后一个弹出对话框的消息循环是活动的,其他则被阻塞。

517

被折叠的 条评论
为什么被折叠?



