Threads von aussen schliessen Teil 49'689



  • Hiho!

    Ich hock seit über 3h an einem Problem, es hat mit Threads zu tun und wie der Titel bereits verrät tut es mir Leid dass es nun schon so oft diskutiert wurde aber ich habe wirklich über 2h gesucht, kombiniert und versucht das hinzukriegen aber ich habe es einfach nicht geschafft. Das Problem ist folgendes:

    Ich habe einen Child-Dialog den ich im Hauptdialog aufrufe (der Child-Dialog ist rahmenlos und man merkt gar nicht dass es ein neues Fenster ist). Dort läuft ein Programmteil ab, also ein Prozess. Und nebenbei werden Progress-Bars usw. angezeigt. Das läuft in 2 Threads ab. Ein Thread der fürs kopieren zuständig ist und einer fürs filtern. Beim zweiten rufe ich dann eine Funktion auf (Close()) und sende dort an mein Parent-Window eine Message dass es einige Elemente aktualisieren soll. Die Funktion sieht folgendermassen aus:

    void CProcessDlg::Close() 
    {
    	m_pParentWnd->PostMessage(WM_USER_GETLISTDATA, WPARAM(0), LPARAM(0));
    	this->DestroyWindow();
    }
    

    Nichts aufregendes. Ich möchte nur meinem Hauptfenster diese Nachricht senden und dann das Child-Fenster schliessen. So sieht das Ende meines zweiten Threads aus aus dem ich Close aufrufe (auch per Message):

    UINT CProcessDlg::ProcessSeparatingThread(LPVOID pParam)
    {
    			CProcessDlg*	pDlg   = (CProcessDlg*)pParam;
    ...
    
    	pDlg->PostMessage(WM_USER_CLOSEWINDOW, WPARAM(0), LPARAM(0));
    	AfxEndThread(exitCode);
    	return 0;
    }
    

    Im Debug-Modus ist alles in Ordnung, es klappt. Wenn ich es jedoch als Release-Version kompilieren will kriegt er an der Stelle einen mächtigen Speicherfehler (Die Anweisung in "0x6c275115" verweist auf Speicher in...). Ich nehme an dass es daran liegt dass vielleicht noch nicht alle Threads geschlossen sind wenn DestroyWindow() aufgerufen wird oder dass ihn die Message stört die ich dem Parent-Window schicke. Denn wenn ich die auskommentiere geht auch im Release-Modus alles gut. Nun meine Frage: Wie kann ich meine Threads von aussen schliessen oder, noch besser, wo liegt hier das Problem und wie kann ich es beheben? An den Messages liegt es nicht, die sind alle gut deklariert und verweisen auf die richtigen Klassen, ich glaube es liegt an der "Reihenfolge" die er ausführt und dann Probleme hat.

    Vielen Dank für die Aufmerksamkeit, Gruss



  • Ich habe das selbe problem gehabt ...
    und habe es gelösst ( hat aber mehr al 3 h gedauert ) ...
    ich habe die Lösung im moment nicht parat werde diese aber heut abend senden ...
    Als erstes aber kannst Du mal versuchen anstat PostMessage SendMessage zu benutzen ich denke das würde auch das Problem lösen ...



  • Hi KinkLeo!

    Danke für deinen Beitrag, SendMessage hat jedoch leider nichts gebracht. Kommt immernoch der selbe Speicherfehler. Ich würde mich freuen wenn du deine Lösung posten könntest, vielen Dank!



  • Ich bin noch bei der Arbeit bin so ca. 19 Uhr zuhause und dann so gegen 19.30 sende ich dir das wäre aber Hilfreich wenn du Mir noch die Nachricht Verarbeitungs routine posten würdest ... Vielleich hast Du ja da noch ein Bug drin 4 Augen sehen enden(t) mehr als 2 ...



  • kommt der Fehler sicher nur in der Release Version vor?



  • Sry sitze immer noch bei der Maloche hab ein Problem mit dem Mainframe ....melde mich sobald es geht ... So ist der Jo b 😞


Anmelden zum Antworten