Programm entfernt sich nicht aus dem Speicher...



  • Hallo!

    Ich habe das Problem, das sich das gesamte Programm dann nicht aus dem Speicher entfernt, wenn ich es und alle seine geöffneten Dokumente (also ohne alle Doks und Views gschlossen zu haben) entweder per "Beenden" oder mit dem "X" schließen will...
    Schließe ich aber vorher manuell alle Dokumente, gibts keine Probleme!

    Woran kann das generellliegen? Da das Prog ziemlich komplex ist (Multithread, multiple Views, 6000 Zeilen Code, usw.) kann ich nicht auf alles eingehen, was alles implementiert ist..

    Eine ganz allgemeine Antwort würde mir weiterhelfen, dann könnte ich nämlich gezielt nach Ursachen forschen und diese hier dann posten, falls es mir nicht gelingen sollte, sie zu beseitigen;-)

    Ein paar Fakten zum Prog:

    MDI, Threads, zwei Views (also zwei DocTemplates), GDI mit Bitmaps, ein nichtmodaler Dialog, XML-Parsing, XML-DOM, ...
    Bei der Implementation des Threads habe ich mich an "Visual C++ - Windows-Programmierung mit den MFC" von Frank Budszuhn orientiert, da sollte das Problem also nicht liegen:-)

    Vielleicht weiß jemand eine Antwort?? Danke...

    Grüße



  • 6000 Zeilen Code

    Ich wär froh, wenn ich mit 6000 Zeilen alles erledigt hätte. Ich habe gerade die 78000ste überwunden 😉

    Nun zum Problem:
    Wahrscheinlich wird/werden die Threads nicht richtig beendet. Kannst Du ja im Taskmanager von Win2K oder so recht leicht nachprüfen. In welcher Funktion werden diese denn beendet?



  • Hallo!

    An dem Thread liegt es wohl eher nicht, denn dieser wird manuell beendet, sobald ein Ereignis wie "Dokument löschen", "View schließen", "Berechnung abbrechen" usw eintritt. Dazu benutze ich ein CEvent-Objekt. AutoDelete ist übrigens für den Thread abgeschaltet, dieser wird dann in der OnCloseDocument() der Dok.Klasse gelöscht. Wie gesagt, bei der Implementation des threads habe ich mich an "Visual C++" von F. Budszuhn gehalten, und dass bei Schließen des Programms die Berechnung, die der Thread durchführt, abgebrochen wird (keine 100% Prozessorauslastung mehr) ist mM ein Indiz dafür, dass dort das Problem nicht liegt. Trotzdem, ich werde nochmal alles überprüfen und danke für die Antwort.
    Könnte es auch an einem zweiten View, das sich mit dem ersten dasselbe Dokument teilt, liegen?

    Grüße



  • MDI in der MFC hat 2 verschiedene Close-Mechanismen.
    1.
    Drückt man das Kreuz im ChildWindow, wird erst das View zerstört, danach das ChildWindow und dann wird OnCloseDocument aufgerufen.
    2.
    Drückt man im Menü->Datei->Schliessen, wird erst OnCloseDocument aufgerufen und dann werden alle Fenster gelöscht. Und es ist nicht einfach, herauszufinden, wie das Dokument geschlossen wurde. Vielleicht hilft Dir diese Info.


Anmelden zum Antworten