您的位置:首页 > 其它

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不应该放在这之后,而应该放在线程三部曲第二步的静态线程体函数的最后执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: