Windows消息响应机制之四:PostQuitMessage和GetMessage函数

本文探讨了在Win32应用程序中遇到的GetMessage函数问题,特别是在处理WM_DESTROY消息时,PostQuitMessage如何影响消息循环。通过调试发现,PostQuitMessage并不直接发送WM_QUIT,而是设置系统标志,而GetMessage会在适当时候获取WM_QUIT消息,导致程序退出。文中引用了一段网上解释,并表示将进一步学习验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Windows是消息驱动的操作系统。在Windows环境下编程必须熟练掌握Windows消息响应机制。
 今天在练习Win32编程时碰到一个关于GetMessage函数的问题。这个问题之前一直没有引起过我的注意,但是今天
 在网上搜索发现这个问题很多程序员都跟我一样处于一知半解的状态。
 在Win32应用程序的主函数中有一段消息循环收发的代码:
 while (GetMessage(&Msg, hWnd, 0, 0))
 {
  TranslateMessage(&Msg);
  DispatchMessage(&Msg);
 }
 在Debug环境下启动程序后点击关闭按钮可以正常关闭掉窗口,但是VS2008却无法正常退出执行状态(即应用程序没有正常返回)。于是我按如下步骤进行了Debug:
 (1).在消息处理函数中WM_DESTORY的处理中设置断点,点击关闭按钮case WM_DESROTY代码段可以执行;
 (2).当程序执行到case WM_DESROTY代码段之后再在主函数的TranslateMessage(&Msg)处设置断点
 (3).按下F5发现程序可以执行到TranslateMessage(&Msg)处。
 经过上述步骤Debug后发现当在WM_DESTORY消息处理过程中调用PostQuitMessage(0)函数后程序的消息循环代码段可以继续执行,但是按MSDN的描述PostQuitMessage函数会往线程的消息队列中插入一个WM_QUIT消息,而GetMessage函数在收到WM_QUIT消息后会返回一个非正数。
 后来在网上搜索网友克塞前来拜访的一段解释:
 对PostQuitMessage而言,它实际上并不发送WM_QUIT消息,他所做的实际是设置一些特殊的系统标志,而队列存取体系根据这个标志并结合一些比较
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值