Problem mit Thread und Steuerelement
-
Morgen,
ich habe mir einen Arbeitsthread erstellt, der ein Steuerelement mit Werten füllen soll.
//Header
static UINT AnzeigeAktualisieren(LPVOID pParam); BOOL abbruch; BOOL threadstart; DWORD ExitCode; CWinThread* thread; int itemNr; LV_ITEM item;//CPP Datei
//Steht in der OnInitDialog = Threadstart this->thread = AfxBeginThread(AnzeigeAktualisieren,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); if ( this->thread != NULL ) { this->thread->m_bAutoDelete = FALSE; this->thread->ResumeThread(); }//Dies ist mein Thread //Bitte kommentierte Zeile anschauen; dort geht er rein und kommt net mehr raus wenn ich auf abbruch gedrückt habe UINT Auswahl::AnzeigeAktualisieren(void *pParam) { Auswahl* lpouterThis = (Auswahl*) pParam; lpouterThis->threadstart = TRUE; lpouterThis->GetDlgItem(IDC_Abbruch)->EnableWindow(TRUE); lpouterThis->item.mask = LVIF_TEXT; //MySQL Ergebis holen while(Ergebnismenge != NULL) { for (int i = 0; i < Spaltenanzahl; i++) { lpouterThis->item.iItem = 0; lpouterThis->item.pszText = row[i]; lpouterThis->item.iSubItem = 0; //Hier Fehler lpouterThis->itemNr = lpouterThis->m_CBenutzer.InsertItem(&lpouterThis->item); for ( int y = 1; y <= 5; y++ ) { i++; lpouterThis->item.iItem = lpouterThis->itemNr; lpouterThis->item.iSubItem = y; lpouterThis->item.pszText = row[i]; lpouterThis->m_CBenutzer.SetItem(&lpouterThis->item); //Hier geht er rein und macht nich weiter, wenn abbruch = TRUE ist } if ( lpouterThis->abbruch ) break; } if ( lpouterThis->abbruch ) break; } //MySQL Ergebnis freigeben AfxEndThread(1,TRUE); return 0; }//Mein Abbruch Button this->abbruch = TRUE; if ( this->threadstart ) { while(WaitForSingleObject(this->thread->m_hThread, INFINITE) != WAIT_OBJECT_0); GetExitCodeThread(this->thread->m_hThread,&ExitCode); delete this->thread; if(ExitCode == 1) { MessageBox("Ok",NULL,MB_OK); } }Soweit funktioniert ja auch alles wunderbar, bis ich meinen schönen Button "Abbruch" drücke.
Ich habe schon debugt ohne ende und das Ergebnis ist, dass er den Thread auch wunderbar weiterführt, when "waitForSingleObjekt" aufgerufen wird.
Aber sobald er an die Stelle kommt, wo er das Item setzten soll (SetItem), geht er da rein und kommt aus dieser Methode nicht wieder raus.
Wenn ich diese Zeile auskommentiere und auf "Abbruch" drücke, funktioniert alles wunderbar.
Wo hat er dort den Fehler? Ich habs auch schonmal mit DeleteItem o.ä. versucht. Leider das gleiche Ergebnis.
m_cBenuter ist vom Typ CListCtrl
Ich habe echt keine Ahnung, warum er das nicht macht. Das komische daran ist aber, dass das Problem, wie gesagt, erst auftritt, wenn ich "Abbrch" drücke. Vorher führt er die Methode ohne Probleme aus.