GetMessage第二个参数常见错误的解释
来源:互联网 发布:mac 显示.ds store 编辑:程序博客网 时间:2024/05/16 13:07
今天无意中写错了GetMessage的第二个参数,本应该是填NULL的,但是我填写了使用CreateWindow()所返回的窗口句柄,导致在调试时,窗口被销毁了,但是进程却没有清除。这个问题最终在MSDN中找到了答案。下面是百度的说明。
GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
参数:
lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。当其值取NULL时,GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
wMsgFilterMin:指定被检索的最小消息值的整数。
wMsgFilterMax:指定被检索的最大消息值的整数。
返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是-1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。
从说明中可以知道,第二个参数是,消息来源的窗口句柄。这里我直接就很自然的想到我接受的窗口消息不就是从CreateWindow所创建的窗口实例返回的句柄吗?但是这样的想法导致了,在程序关闭时出现了异常。因为GetMessage第二个参数如果是一个无效的句柄时,函数就会返回-1。这里如果填上CreatWindwo返回的窗口句柄会怎么样呢,这里在窗口正常运行时是没有问题的,但是在关闭过程中。当点击X,关闭程序,发送WM_CLOSE消息,并处理后调用DestroyWindow()发送WM_DESTROY消息,于是窗口被销毁,再经过处理发送了WM_QUIT消息,被GetMessage取到。但是因为在上面的WM_DESTROY消息时窗口就被销毁了,于是当时的句柄已经失效,于是这里GetMessage会返回-1.于是导致消息循环成了一个死循环。于是进程并不会被清除出内存。
从说明中可以知道,第二个参数是,消息来源的窗口句柄。这里我直接就很自然的想到我接受的窗口消息不就是从CreateWindow所创建的窗口实例返回的句柄吗?但是这样的想法导致了,在程序关闭时出现了异常。因为GetMessage第二个参数如果是一个无效的句柄时,函数就会返回-1。这里如果填上CreatWindwo返回的窗口句柄会怎么样呢,这里在窗口正常运行时是没有问题的,但是在关闭过程中。当点击X,关闭程序,发送WM_CLOSE消息,并处理后调用DestroyWindow()发送WM_DESTROY消息,于是窗口被销毁,再经过处理发送了WM_QUIT消息,被GetMessage取到。但是因为在上面的WM_DESTROY消息时窗口就被销毁了,于是当时的句柄已经失效,于是这里GetMessage会返回-1.于是导致消息循环成了一个死循环。于是进程并不会被清除出内存。
0 0
- GetMessage第二个参数常见错误的解释
- 讨论:GetMessage()的第二个参数使用
- GetMessage API 第二个参数理解
- GetMessage函数之第二个参数
- GetMessage函数 第二个 写成了hwnd
- setTimeout的第二个参数
- valgrind检测常见的错误解释
- 摄像头常见参数解释
- 摄像头常见参数解释
- javascript常见错误解释
- javascript常见错误解释
- checkstyle常见错误解释
- C++语言99个常见编程错误57:对参数的直接初始化
- GetMessage参数错误导致无法完全退出程序
- 一个常见的错误pthread_create()的参数
- CList第二个参数的意思(原创)
- 关于 jquery 的第二个参数 undefined
- addEventListener第二个参数的handleEvent
- STL容器-map用法总结
- 性能优化
- 张高兴的 UWP 开发笔记:用 Thumb 控件仿制一个可拖动 Button
- 获取滑动条位置,动态调整对话框显示位置;为动态添加的button添加click事件
- Zigbee基本概念
- GetMessage第二个参数常见错误的解释
- zb的生日
- [多项式开根 模板题] BZOJ 3625 [Codeforces Round #250]小朋友和二叉树
- 谈谈Android机型适配
- winform为什么我在Debug模式下生成就可以,在Release模式下生成就报错
- 两种方式给UIImage添加六边形边框
- Tree Traversals (25)
- mysql性能优化-慢查询分析、优化索引和配置
- 音、视频编码格式介绍