线程句柄造成内存泄露,请教高手如何避免

2025-04-19 14:09:15
推荐回答(1个)
回答1:

因此,两个问题: ------解决方案-------------------- 应该设置正确的出口条件。 ------解决方案-------------------- 可以用WaitForSingleObject来判断线程是否已经结束。 ------解决方案-------------------- 你必须等待你的线程返回。 HANDLE hAllThread[5]; WaitForSingleObject(hAllThread, 5, TRUE, 100000); 返回以后才是安全的 ------解决方案-------------------- WaitForMultipleObject ------解决方案-------------------- 晕了,如果lz直接在对话框线程用WaitForMultipleObject或者MsgWaitForMultiObjects等wait函数,那么在wait的时候,线程被阻塞,界面就失去响应了。。。 有2个简单的办法: 1 不使用wait族函数,而是在2个线程函数返回的时候,自己给主线程发一个自定义消息。 主线程使用一个标志记录2个线程是否结束处理,收到这个自定义消息后将标志置上。最后主线程要退出的时候,比如收到WM_DESTROY消息,判断一下标志,如果标志说明线程没有结束,则调用TerminateThread强制结束,或者等待,然后CloseHandle线程句柄。 会不会虽然只有2个线程函数,但是因为所谓的定时调用,产生了线程的多个实例,而一直用原来的句柄变量来收集这些新实例的句柄,这样句柄原来的内核对象就失去释放的机会了。。。 如果是这样,解决的办法还是如上,不过麻烦了点,每次调用创建线程函数时都应该产生一个新句柄,并且要记录下来。。。