程序退出如何结束线程,出现内存泄露!
大拿 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();
}