nach Beendigung eines worker thread und schliessen des Dialog => fehler
-
thread :
// TRHEAD funktionen UINT CControl::ThreadFunc(LPVOID Data){ threadPara *back = (threadPara*)Data; CStatic *p = (CStatic*) back->pInstance->GetDlgItem(IDC_STATIC); CString str="Thread Iteration: "; int i=0; while(back->pInstance->EndThread){ str.Format("%i",i++); p->SetWindowText(str); } // ::PostMessage((HWND)Data, WM_THREADFINISHED, 0, 0); //AfxEndThread(false); return 0; } void CControl::startThread(){ param->a=0; param->b='a'; param->pInstance=this; int i=0; index=&i; EndThread=true; if(pThread==NULL) pThread= AfxBeginThread(CControl::ThreadFunc,(LPVOID)param); //hThread= CreateThread( NULL,0,CControl::ThreadFunc,(LPVOID)param,0,&dwThread); }// Dilaog schliessen
void CControl::OnBnClickedCancel(){ DWORD status; EndThread=false; ::GetExitCodeThread(pThread->m_hThread,&status); if(status == STILL_ACTIVE) MessageBox("Thread In Execution"); pThread=NULL; OnCancel(); }wenn das dilaog geschlossen wurde kommt fehler in dbgheap.h
-
Dein Thread Objekt der durch AfxBeginThread zurückgelifert wird sofort bei Beenden des Threads zerstört. Wenn Du also wirklich diesen Thread Zeiger benötigst um auf das Ende zu warten, dann solltest Du m_bAutoDelete des Threads auf FALE setzen und nach dem Ende des Threads im Mainthread das Objekt per delete entsorgen.