打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SendMessage(hwnd,WM_QUIT,0,0); 为啥不好使
有人说:(这是错的!)
这是死循环,SendMessage(hwnd,WM_QUIT,0,0);
在消息队列中阻塞,后面的消息就都不会执行,而你阻塞的条件就是后面的消息执行完
其实:(对的!)
根本不是阻塞,
这个在SendMessage语句之后设个断点调试一下就知道了。
GetMessage只在有队列消息时返回,WM_QUIT会使其返回0,一般消息循环都是在GetMessage返回0时结束
PostMessage产生队列消息,
SendMessage产生非队列消息,
因此SendMessage发的WM_QUIT不会使消息循环结束以WM_QUITE为参数的SendMessage,只是调用以WM_QUITE为参数的WndProc而已。
而你的WndProc没有对WM_QUITE消息进行处理,而是调用了DefWindowProc。
而DefWindowProc中对WM_QUITE消息是没有默认的处理的。
要让进程结束,就得用ExitProcess或TerminateProcess,可以自己显示调用,
也可以让WinMain函数返回后,由运行库来调用。
要让WinMain函数返回,就得让while循环结束。
要让while结束的条件,就得让GetMessage返回0.
要让GetMessage返回0,线程消息队列就必须设置了QS_QUIT状态标记,或者有WM_QUIT消息。
而设置QS_QUIT标记,可由PostQuitMessage来完成,
WM_QUIT可由PostMessage来完成。
【按 使用PostQuitMessage()与PostMessage()的不同是:
前者把消息列队里的QS_QUIT标志打开,并且等待程序处理完消息列队里的所有消息后才结束消息循环。
后者是把WM_QUIT直接放到消息列队,消息循环取到得下一个消息是WM_QUIT就立即退出。MSDN里不建议使用PostMessage发送WM_QUIT消息,因为这样会造成程序的收尾工作无法进行,正常退出后所需要的资源释放等操作就没法执行了。】
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
windows消息队列 - windows - 我的爱好
Windows消息机制 vc
一些WIN32编程的总结
Windows 消息机制详解
WM_CLOSE、WM_DESTROY、WM_QUIT, SENDMESSAGE ,POS...
Windows消息机制(Windows Messaging)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服