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


  • Mod

    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.


Anmelden zum Antworten