VC程序结束后,仍在内存中运行??? 用VC编的mfc appwizard(exe)的应用程序,在我点击关闭对话框结束应用程序后,在资源管理器中,该进程仍在占用内存资源,每次需要结束该进程方可重新构建执行。有哪些什么原因造成该情况?怎么解决呢?望高手指点,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是程序内部阻塞造成,比如退出时等待线程或事件等(WaitForSingleObject等)。解决办法是首先找到阻塞的位置(可以用断点或设置CheckPoint等),然后根据情况进行处理(比如设置TIMEOUT等)。 关闭对话框,难道不是MFC内部自动发送消息结束么? 理解清楚Windows程序关闭所需要进行的工作,然后在这些消息函数里寻找答案,以下是转自《深入线出MFC》的一段关于程序的创建到关闭的描述: 1.程序初始化过程中调用CreateWindow,为程序建立了一个窗口,作为程序的屏幕舞台。CreateWindow产生窗口之后会送出WM_CREATE直接给窗口消息处理函数。 2.在程序活着的过程中,不断以GetMessage从消息队列中抓取消息。如果这个消息是WM_QUIT,GetMessage会传回0而结束while循环,进而结束整个程序。 3.DispatchMessage通过Windows USER模块的协助与监督,把消息分派至窗口消息处理函数。消息将在该处被判别并处理。 4.程序不断进行2.和3.的操作。 5.当使用者按下系统菜单的Close命令项时,系统送出WM_CLOSE。通常程序的窗口消息处理函数不拦截此消息,于是DefWindowProc处理它。 6.DefWindowProc收到WM_CLOSE后,调用DestroyWindow把窗口消除。DestroyWindow本身又会送出WM_DESTROY. 7.程序对WM_DESTROY的标准反应是调用PostQuitMessage。 8.PostQuitMessage没什么其它操作,就只送出WM_QUIT消息,准备让消息循环中的GetMessage取得,如步骤2,结束消息循环。对于程序的关闭的确是有默认的操作,也就是对应上面的5-8的,但你的程序可以截取这些消息进行改写它的默认操作。程序窗口已经关闭而程序的进程还没有结束,就是因为程序处理了WM_CLOSE和WM_DESTROY但没有发出PostQuitMessage,而导致程序没有向系统发出WM_QUIT消息,所以程序的消息循环没有结束,所以程序的主进程没有结束! 一定要保证PostQuitMessage消息的发出. MFC CListCtrl控件遍历列标题,并得到标题文本 关于WinExec参数 怎么做启动多个QQ的程序呢? 不自动该用哪个控件开发,求助 BYTE和CString的转换问题 请问 SHBrowseForFolder 如何设置 默认路径? 文件打开问题 网络限速方法? 哪里有下载学习tcp/ip协议的好书?在线等! 大家好!!!怎样通过NetBios获得指定计算机的组名称 冬至为什么要吃饺子? [求助]程序运行的问题
2.在程序活着的过程中,不断以GetMessage从消息队列中抓取消息。如果这个消息是WM_QUIT,GetMessage会传回0而结束while循环,进而结束整个程序。
3.DispatchMessage通过Windows USER模块的协助与监督,把消息分派至窗口消息处理函数。消息将在该处被判别并处理。
4.程序不断进行2.和3.的操作。
5.当使用者按下系统菜单的Close命令项时,系统送出WM_CLOSE。通常程序的窗口消息处理函数不拦截此消息,于是DefWindowProc处理它。
6.DefWindowProc收到WM_CLOSE后,调用DestroyWindow把窗口消除。DestroyWindow本身又会送出WM_DESTROY.
7.程序对WM_DESTROY的标准反应是调用PostQuitMessage。
8.PostQuitMessage没什么其它操作,就只送出WM_QUIT消息,准备让消息循环中的GetMessage取得,如步骤2,结束消息循环。对于程序的关闭的确是有默认的操作,也就是对应上面的5-8的,但你的程序可以截取这些消息进行改写它的默认操作。程序窗口已经关闭而程序的进程还没有结束,就是因为程序处理了WM_CLOSE和WM_DESTROY但没有发出PostQuitMessage,而导致程序没有向系统发出WM_QUIT消息,所以程序的消息循环没有结束,所以程序的主进程没有结束!