会陷入死循环吗?

JZY0801 2011-09-07 06:56:13
我们知道在windows中处理一个消息期间,可以调用产生新消息的函数,这个时候windows会去处理这个新产生的消息,等这个新消息处理完了之后,再去处理前一个消息,那么这样会不会陷入死循环呢?
...全文
161 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
modicum_lf 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]
你低估了盖次的智商
[/Quote]

++

txzsp 2011-09-08
  • 打赏
  • 举报
回复
当然不会,消息响应函数调用的并不是消息队列中对应的消息响应函数,而是一个普通函数,只是这个普通函数比较特殊,兼做另一个消息的响应函数而已。
wang0635 2011-09-08
  • 打赏
  • 举报
回复
不能叫做死循环吧
消息队列中全是WM_PAINT了
旭子 2011-09-08
  • 打赏
  • 举报
回复
不会, WINDOWS里面有 IRQL 中断请求队列
由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软中断则是完全虚拟出来的。

PASSIVE_LEVEL
  IRQL最低级别,没有被屏蔽的中断,在这个级别上,线程执行用户模式,可以访问分页内存。
APC_LEVEL
  在这个级别上,只有APC级别的中断被屏蔽,可以访问分页内存。当有APC发生时,处理器提升到APC级别,这样,就屏蔽掉其它APC,为了和APC执行一些同步,驱动程序可以手动提升到这个级别。比如,如果提升到这个级别,APC就不能调用。在这个级别,APC被禁止了,导致禁止一些I/O完成APC,所以有一些API不能调用。
DISPATCH_LEVEL
  这个级别,DPC 和更低的中断被屏蔽,不能访问分页内存,所有的被访问的内存不能分页。因为只能处理非分页内存,所以在这个级别,能够访问的Api大大减少。
DIRQL (Device IRQL)
  一般的,更高级的驱动在这个级别上不处理IRQL,但是几乎所有的中断被屏蔽,这实际上是IRQL的一个范围,这是一个决定某个驱动有更高的优先级的方法。

[Quote=引用楼主 jzy0801 的回复:]
我们知道在windows中处理一个消息期间,可以调用产生新消息的函数,这个时候windows会去处理这个新产生的消息,等这个新消息处理完了之后,再去处理前一个消息,那么这样会不会陷入死循环呢?
[/Quote]
Athenacle_ 2011-09-07
  • 打赏
  • 举报
回复
的确,可以说Windows程序就是在一个处理消息的死循环中。。不过
1.当发送一个 WM_QUIT消息的时候就会跳出
2.处理消息的时间比消息到达的时间快
AnYidan 2011-09-07
  • 打赏
  • 举报
回复
你低估了盖次的智商
等待升级 2011-09-07
  • 打赏
  • 举报
回复
用多线程的思想去理解

1 1个人负责发消息
2 另一个人负责解释
JZY0801 2011-09-07
  • 打赏
  • 举报
回复
在《Windows程序设计》上有这样一段话:
但是,窗口过程可以调用为其发送其他消息的函数。在这种情形下,在该函数调用返回之前,窗口过程必须将第二个消息处理完毕,此时窗口过程才处理前一条消息。

这段话我们该如何去理解呢?
JZY0801 2011-09-07
  • 打赏
  • 举报
回复
比如我写的一个程序:
switch(uMsg)
{
...
...
case WM_PAINT:
InvalidateRect(hWnd, NULL, TRUE);
MessageBox(hWnd, TEXT("Hello"), TEXT("Tell"), MB_OK);
return 0;
...
...
}


这个程序会一直不停的执行,陷入了一个死循环,这个时候是不可能执行其他的操作的,如果我将MessageBox这个函数去掉,其实这个时候程序也是在不断的执行case WM_PAINT部分,但是这个时候却可以执行一些其他的操作,这是否可以理解为WM_PAINT消息的优先级比较低的原因,导致在收到其他消息时优先处理比WM_PAINT级别高的消息呢?
proghua 2011-09-07
  • 打赏
  • 举报
回复
消息应该在消息队列中,一个消息没处理完,不会去处理另外一个消息
尘缘udbwcso 2011-09-07
  • 打赏
  • 举报
回复
初学者愚见
不会
楼主所诉看着像中断
对windows消息循环不是很明白
帮顶
等高手解释

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧