MFC程序退出
2015-02-27 22:54
295 查看
GetMessage(&msg,hwnd,0,0),它是检索消息队列,直到检索到WM_QUIT返回FASLE结束循环,一般结束消息循环,程序进程也就结束了。
我到MSDN上查到GetMessage()这个函数,MSDN上的解释是这样的:
hWnd
[in] Handle to the window whose messages are to be retrieved. The window must belong to the calling thread. The following value has a special meaning.
为NULL时:GetMessageretrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread using thePostThreadMessagefunction.
注意第一条的意思:检索所有属于主线程的窗体消息,而我们的WM_QUIT是通过 PostQuitMessage(0)发出的,而非普通的窗口消息,所以这时我们的DestroyWindow(hwnd)已经执行完成,所以窗体销毁了,但是我们GetMessage()永远不会收到窗口的WM_QUIT消息了,因为这个线程的唯一窗口已经被销毁了。而当GetMessage()第二个参数是NULL时,GetMessage取得那些属于调用线程的窗口的消息和通过PostThreadMessage函数投递(发送)到调用线程的线程消息。
其次我找了其他结束进程的函数,例如:ExitProcess(0)和 TerminateProcess(GetCurrentProcess(),0),这两个函数都能结束进程,区别是 PostQuitMessage(0)是发送一个WM_QUIT消息,等处理完所有的消息后正常退出进程,而上面两个函数则是强制结束进程,这样容易出现内存泄漏,但是我发现现在的系统应该都没问题。。。。
GetMessage(&msg,hwnd,0,0),它是检索消息队列,直到检索到WM_QUIT返回FASLE结束循环,一般结束消息循环,程序进程也就结束了。
我到MSDN上查到GetMessage()这个函数,MSDN上的解释是这样的:
hWnd
[in] Handle to the window whose messages are to be retrieved. The window must belong to the calling thread. The following value has a special meaning.
为NULL时:GetMessageretrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread using thePostThreadMessagefunction.
注意第一条的意思:检索所有属于主线程的窗体消息,而我们的WM_QUIT是通过 PostQuitMessage(0)发出的,而非普通的窗口消息,所以这时我们的DestroyWindow(hwnd)已经执行完成,所以窗体销毁了,但是我们GetMessage()永远不会收到窗口的WM_QUIT消息了,因为这个线程的唯一窗口已经被销毁了。而当GetMessage()第二个参数是NULL时,GetMessage取得那些属于调用线程的窗口的消息和通过PostThreadMessage函数投递(发送)到调用线程的线程消息。
其次我找了其他结束进程的函数,例如:ExitProcess(0)和 TerminateProcess(GetCurrentProcess(),0),这两个函数都能结束进程,区别是 PostQuitMessage(0)是发送一个WM_QUIT消息,等处理完所有的消息后正常退出进程,而上面两个函数则是强制结束进程,这样容易出现内存泄漏,但是我发现现在的系统应该都没问题。。。。
相关文章推荐
- MFC Dialog 屏蔽Enter和Esc按下时自动退出程序
- 使用OpenCv库的MFC程序在退出后报内存泄露Detected memory leaks! 可能解决方法
- 对话框的MFC,为什么一点回车键,程序就退出
- MFC对话框程序屏蔽ESC和ENTER键退出,完美解决方案
- MFC中exit(0)退出程序奔溃
- PostQuitMessage(0)要慎用,经常会造成MFC程序退出时内存泄露,还是尽量使用MFC基类的退出函数比较好。
- MFC退出程序
- MFC中解决基于对话框程序按下Enter,Esc程序自动退出的方法
- MFC对话框程序按回车后程序退出的解决办法
- vc2010使用CMFCEditBrowseCtrl控件导致程序退出崩溃解决
- MFC对话框退出程序所调用的函数
- 关于MFC程序按ENTER和ESC会退出的解决办法
- 按Enter键或者Ese,mfc程序退出的解决方法
- 关于MFC读取excel文件后退出程序后出现dispatch错误的解决方法
- MFC对话框程序屏蔽ESC和ENTER键退出
- 在MFC程序中激活以前的实例,并退出本实例
- MFC退出程序时进程未终止
- MFC基于对话框的程序,按回车退出的解决办法
- 使用OpenCv库的MFC程序在退出后报内存泄露Detected memory leaks! 可能解决方法
- MFC MDI程序的退出菜单突然不能退出了