用VC编的mfc appwizard(exe)的应用程序,在我点击关闭对话框结束应用程序后,在资源管理器中,该进程仍在占用内存资源,每次需要结束该进程方可重新构建执行。有哪些什么原因造成该情况?怎么解决呢?望高手指点,谢谢 

解决方案 »

  1.   

    是程序内部阻塞造成,比如退出时等待线程或事件等(WaitForSingleObject等)。解决办法是首先找到阻塞的位置(可以用断点或设置CheckPoint等),然后根据情况进行处理(比如设置TIMEOUT等)。
      

  2.   

    关闭对话框,难道不是MFC内部自动发送消息结束么?
      

  3.   

    理解清楚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消息,所以程序的消息循环没有结束,所以程序的主进程没有结束!
      

  4.   

    一定要保证PostQuitMessage消息的发出.