程序退出如何结束线程,出现内存泄露!

大拿 2010-07-03 10:23:47
程序退出如何结束线程?

CWinThread *pThread; //线程对象   全局
CEvent threadStart,threadEnd;//线程开始结束对象 全局

UINT ThreadReadComm(LPVOID lParam)
{
::WaitForSingleObject(threadStart.m_hObject,INFINITE);
AfxMessageBox("Thread start.");
CJanitorView* p=(CJanitorView *)lParam;
while(!1)
{
Sleep(500);
Beep(100,100);
//等待threadEnd事件有信号,无信号时线程在这里悬停
int result=::WaitForSingleObject(threadEnd.m_hObject,0);
if(result==WAIT_OBJECT_0)
{
AfxMessageBox("Thread End.");
break;
}

}
return 0;
}
void CJanitorView::OnInitialUpdate()
{
...
threadStart.SetEvent();//threadStart事件有信号
pThread=AfxBeginThread(ThreadReadComm,this);//启动线程
pThread->m_bAutoDelete=false; //线程为手动删除
...
}

void CJanitorView::OnDestroy()
{

//删除线程
     //以下语句能完成退出程序但 出现内存泄露
//::TerminateProcess(pThread->m_hThread,0);
//CloseHandle(pThread->m_hThread);
//delete pThread;

//以下语句不能完成退出程序
threadEnd.SetEvent();
WaitForSingleObject(pThread->m_hThread,INFINITE);
delete pThread;
FreeLibrary(hInst_Card);//释放动态库资源
CFormView::OnDestroy();
}
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueMap 2010-07-03
  • 打赏
  • 举报
回复
http://www.busfly.cn/post/88.html

http://group.gimoo.net/review/13390

看下这两个网站,虽然有些广告,不过应该可以解决疑问。
来灵 2010-07-03
  • 打赏
  • 举报
回复
while(!1) 能进循环吗?
threadEnd.SetEvent(); 将无信号的事件对象设为有信号,WaitForSingleObject 返回WAIT_OBJECT_0,则退出循环

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧