
线程句柄造成内存泄露,请教高手如何避免
展开全部
因此,两个问题:
------解决方案--------------------
应该设置正确的出口条件。
------解决方案--------------------
可以用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个线程函数,但是因为所谓的定时调用,产生了线程的多个实例,而一直用原来的句柄变量来收集这些新实例的句柄,这样句柄原来的内核对象就失去释放的机会了。。。
如果是这样,解决的办法还是如上,不过麻烦了点,每次调用创建线程函数时都应该产生一个新句柄,并且要记录下来。。。

2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询