MFC解决程序退出时死锁和内存或资源泄露的问题
2015-08-17 16:14
549 查看
1.在OnDestroy等Windows消息处理函数里,慎用WaitForSingleObject函数,如果等待的对象再被通知之前,另外的线程直接或间接触发了其他消息处理函数,则会引发消息排队,由于当前的消息处理函数正在WaitFor并没有返回,所以其他消息函数可能无法被系统调用,导致死锁。这样程序就无法正常退出了。
2.另外在调用会直接或间接触发消息处理函数的函数之前应该使用IsWindow(m_hWnd)对消息的处理窗口进行验证,避免调用时窗体资源已被释放被系统回收而产生的警告或崩溃;
3.尽量使用安全方式停止线程,万不得已使用TerminateThread的时候请在对象的析构函数中调用,并使用(void)WaitForSingleObject(m_hThread, INFINITE)等待,CloseHandle(m_hThread)和m_hThread=NULL不应该放在这之后,而应该放在线程三部曲第二步的静态线程体函数的最后执行。
2.另外在调用会直接或间接触发消息处理函数的函数之前应该使用IsWindow(m_hWnd)对消息的处理窗口进行验证,避免调用时窗体资源已被释放被系统回收而产生的警告或崩溃;
3.尽量使用安全方式停止线程,万不得已使用TerminateThread的时候请在对象的析构函数中调用,并使用(void)WaitForSingleObject(m_hThread, INFINITE)等待,CloseHandle(m_hThread)和m_hThread=NULL不应该放在这之后,而应该放在线程三部曲第二步的静态线程体函数的最后执行。
相关文章推荐
- MYSQL 系统编码的设置
- 基于jQuery的前端如何做到无伤迁移
- 子iframe 怎么调用 父级的JS函数
- 【web】web欢迎页面执行servlet
- Swift之改变状态栏显示颜色的两种方法
- unix下的I/O------阻塞,非阻塞,同步,异步
- 通过气象局获取天气
- C语言结构体排序方法
- 自己动手做Android音乐播放器
- 【CSS3 入门教程系列】CSS3 Media Queries 实现响应式设计
- MySQL explain执行计划解读
- JS实现下拉框时间选择
- Android中style在布局文件中的应用
- bzoj 1588 [HNOI2002]营业额统计 splay
- Java多线程实践之基础篇
- ios 后退指定 跳转
- C语言得到当前系统时间
- 出圈
- 圆形进度条ProgressBar 的实现方式
- 剑指offer 算法 (位运算)