MFC程序关闭后进程未退出问题的解决

MFC虽然很老了,但对于科研工作者而言还是够用的,而且现有的学习资料很丰富。我开发了一个图像处理程序,总的代码大概有7000多行,程序运行基本稳定。由于我要实现原视频流和处理后的视频流同时在窗口显示,就必须在OnTimer中开很多计时器,来完成图像在窗口的刷新任务。原视频流有4个,处理后的视频流有7个,每幅图像1024*1280大小,数据量特别大,即使我开了多线程,在满分辨率下的处理图像显示帧率也只有2~3FPS。

数据量大一方面会导致帧率下降,另一方面会在程序一键式(就是点击那个X号或者Ctrl+F4)退出的时候产生幽灵进程,就是程序关闭了但进程还在跑着。原因是虽然我在单个的模块代码末尾销毁了计数器,但实际上计数器未正常销毁,导致大量图像数据还在缓存里,内存无法释放,进程结束不了。而当我逆操作流程逐步关闭模块时,计数器得到有效销毁,最终在程序关闭后,进程也被正确销毁。

为此,针对一键式退出程序的情况,我重写了 OnDestroy( ) 函数,在函数里对所有的计数器都进行了二次销毁。然后问题解决了,幽灵进程不再出现。

启示就是:在开发程序的时候,如果数据量小,一键式退出应该能够保证进程的有效结束,但当数据量很大的时候,一键式退出并不能很有效的释放被程序占用的资源,好比一下子让计算机释放大量数据,计算机消化不了,为此需要在写代码的时候确保在任何方式下结束程序时都能有效释放资源,不然就会导致幽灵进程的出现。

我现在使用的是在窗口注销的时候二次销毁计时器,但我觉得也可以尝试分步分时销毁计时器,给计算机一个处理时间。

你可能感兴趣的:(MFC,Visual,Studio,OnTimer,MFC)