解决程序退出时死锁和内存或资源泄露的问题
2010-02-25 16:50
831 查看
解决程序退出时死锁和内存或资源泄露的问题:
1.在OnDestroy等Windows消息处理函数里,慎用WaitForSingleObject函数,如果等待的对象再被通知之前,另外的线程直接或间接触发了其他消息处理函数,则会引发消息排队,由于当前的消息处理函数正在WaitFor并没有返回,所以其他消息函数可能无法被系统调用,导致死锁。这样程序就无法正常退出了。
2.另外在调用会直接或间接触发消息处理函数的函数之前应该使用IsWindow(m_hWnd)对消息的处理窗口进行验证,避免调用时窗体资源已被释放被系统回收而产生的警告或崩溃;
3.尽量使用安全方式停止线程,万不得已使用TerminateThread的时候请在对象的析构函数中调用,并使用(void)WaitForSingleObject(m_hThread, INFINITE)等待,CloseHandle(m_hThread)和m_hThread=NULL不应该放在这之后,而应该放在线程三部曲第二步的静态线程体函数的最后执行。
1.在OnDestroy等Windows消息处理函数里,慎用WaitForSingleObject函数,如果等待的对象再被通知之前,另外的线程直接或间接触发了其他消息处理函数,则会引发消息排队,由于当前的消息处理函数正在WaitFor并没有返回,所以其他消息函数可能无法被系统调用,导致死锁。这样程序就无法正常退出了。
2.另外在调用会直接或间接触发消息处理函数的函数之前应该使用IsWindow(m_hWnd)对消息的处理窗口进行验证,避免调用时窗体资源已被释放被系统回收而产生的警告或崩溃;
3.尽量使用安全方式停止线程,万不得已使用TerminateThread的时候请在对象的析构函数中调用,并使用(void)WaitForSingleObject(m_hThread, INFINITE)等待,CloseHandle(m_hThread)和m_hThread=NULL不应该放在这之后,而应该放在线程三部曲第二步的静态线程体函数的最后执行。
相关文章推荐
- MFC解决程序退出时死锁和内存或资源泄露的问题
- 多线程 DLL 回调函数问题,当应用程序退出时,有些操作并未完成,造成程序内存泄露,如何解决呢
- 如何解决Qt 4GUI程序中动态创建内存的泄露问题
- 多线程程序退出内存句柄泄漏的问题以及解决方法
- 关闭程序后,子线程未正确退出引出的内存泄露问题
- 一次GTK程序内存泄露的解决过程发现的两个内存泄露的问题
- 解决进程间共享内存,由于某个进程异常退出导致死锁问题
- 使用OpenCv库的MFC程序在退出后报内存泄露 可能解决方法
- 关闭程序后,子线程未正确退出引出的内存泄露问题
- [问题解决]LibGDX 桌面程序找不到资源文件夹
- Flex中Module的使用以及内存泄露问题解决方法
- Qt中内存泄露和退出崩溃的问题
- 修改桌面堆栈大小,解决运行大量程序时出现”Out of Memory”(内存不足)错误信息的问题
- tomcat中使用Quartz造成内存泄露的问题解决
- 构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)―托管资源优化―监常用优化措施
- Java 程序的内存泄露问题分析
- Android使用Handler造成的内存泄露问题的解决
- 解决载入(打开)加壳程序后,OD关闭退出的问题
- 自动资源释放-使用对象管理资源,解决资源泄露问题
- 解决 Linux下tomcat启动提示内存泄露问题