Memory Leak im Thread
-
Hallo,
ich habe einen Thread erzeugt, der auch wunderbar funktioniert.
Problem bei der ganze Sache ist, dass ich den m_bAutoDelete auf FALSE habe und dass Objekt später per Delete lösche. Trotzdem bekomme ich Memory Leaks.
Wenn ich m_bAutoDelete aber auf TRUE packe, bekomme ich keine Leaks. Demnach zur Folge muss ich doch noch irgendwas vergessen haben oder nicht?
Schaut bitte mal kurz drüber.
//Header
CWinThread* thread; BOOL threadstart; BOOL abbruch; DWORD ExitCode; static UINT Starten(LPVOID pParam);//CPP Datei
//Wird ausgeführt wenn Button OK gedrückt wird this->thread = AfxBeginThread(Starten,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); if( thread != NULL) { thread->m_bAutoDelete = FALSE; thread->ResumeThread(); } else { // Thread konnte nicht gestartet werden. }//Wird ausgeführt wenn CANCEL gedrückt wird this->abbruch = TRUE; if ( this->threadstart ) { while(WaitForSingleObject(this->thread->m_hThread, INFINITE) != WAIT_OBJECT_0); GetExitCodeThread(this->thread->m_hThread,&ExitCode); if ( ExitCode == 1 ) { this->threadstart = FALSE; this->thread->Delete(); test.Close(); OnCancel(); } } else { test.Close(); OnCancel(); }//Der Thread UINT CTestThreadDlg::Starten(void *pParam) { CTestThreadDlg* lpouterThis = (CTestThreadDlg*) pParam; lpouterThis->threadstart = TRUE; int i = 0; while ( i == 0 ) { lpouterThis->test.WriteString("Testthread\n"); if ( lpouterThis->abbruch ) { lpouterThis->threadstart = FALSE; break; } } AfxEndThread(1,TRUE); return 0; }Ich weiß, dass das mit der Endlosschleife unschön ist, aber das jetzt nur son Testding damit ich den Fehler finden kann.
Also wie gesagt: So wie der Code oben gezeigt ist, bekomme ich Memory Leaks, wenn ich m_bAutoDelete aber auf TRUE setzte, bekomm ich keine.
Was hab ich vergessen?

-
CWinThread::Delete macht eigentlich so gut wie nichts. Es löscht das Objekt, bzw. gibt den Speicher frei, aber nur wenn m_bAutoDelete auf TRUE ist ^^
Was du also tun musst ist ganz einfach:
delete this->thread;Also das CWinThread Objekt löschen.
Grüssli ^^
-
jeppa juppi du
warum bin ich da eigentlich net gleich druf gekommen?
hat mich etwa die Delete() funktion so ausm Konzept gebracht?
