【转】 VC++ 关闭程序后任务管理器进程中进程仍然存在的解决方法

时间:2020-12-29 23:49:56

  转载出处:http://blog.csdn.net/zac_sian/article/details/50809084

  可以从以下两个方面进行查找!
  1、程序开启了进程,进程中使用了while(1),在程序退出时未能关闭该线程
  解决方法: 在主进程类的析构函数结束该线程

  2、程序的消息队列未销毁引起
  使用了GetMessage创建了消息队列,但在程序退出时没有及时处理完消息
解决方法: 将 GetMessage 的最后一个参数设置为PM_REMOVE,即每次处理完消息队列中的消息后即刻从消息队列中销毁该消息

  小结:
  我编程中遇到的问题就属于第二种情况,刚开始从检查全局变量是否在退出时被释放时查起,接着检查了上述的情况1,发现进程还是在任务管理器中存在,最后在调试程序中发现向GetMessage 所在的线程发送了一次某个消息,处理完后发现GetMessage 始终还能继续接收该消息[按理接收一次后下次GetMessage就不会再收到该消息了,所有怀疑是该消息在处理完后没有被销毁,始终存留在消息队列中,导致GetMessage 不停从消息队列中提取该消息。 经过确认发现,是将该函数的最后一个参数设置为NULL引起,改为PM_REMOVE后问题解决

  参考http://blog.csdn.net/yl2isoft/article/details/38168939