Programm steckt nach Beenden in 'AfxInternalPumpMessage()' fest
-
Mein Programm ließ sich bisher normal beenden. Jetzt verschwindet das Fenster nach dem Schließen, aber der Task wird nicht mehr beendet. Der selbst programmierte Programmteil (da wo ich selbst Fehler hätte einbauen können) ist längst beendet.
Wenn ich beim debuggen die "Alle unterbrechen"-taste (Pause-Symbol) drücke, bleibt das Programm innerhalb von 'AfxInternalPumpMessage()' (thrdcore.cpp) stecken.
Diese Funktion wird vom MainThread zur Laufzeit in 'CWinThread::Run()' angestossen.Vermutung:
Es wird nie die 'WM_QUIT' nachricht gesendet!? Wenn ja, wie kann das sein?Was mir komisch vorkommt:
In 'AfxInternalPumpMessage()', Programmzeile if (!::GetMessage(&(pState->m_msgCur), NULL, NULL, NULL)) habe ich folgende Debuginformationen:pState->m_msgCur = {msg=0x000081f8 wp=0x00000000 lp=0x00000000}
Gruß,
Marco
-
In der MFC wird ein WM_QUIT nur gesendet wenn das Fenster was mit CWinThread::m_pMainWnd verknüpft ist zerstört wird.
Debugge doch einfach mal...
Bist Du sicher, dass Dein Fenster zerstört wird?
Hast Du evtl. noch referenzierte COM Objekte, die das Zerstören Deines Hauptfensters verhindern?
-
Es wird kein Fenster zerstört ('DestroyWindow()' wird nicht aufgerufen).
Ich konnte bis zum Ende von 'AfxWndProc()' debuggen - die Funktion hat 'AfxCallWndProc(...) zurück gegeben, danach waren keine Assemblyinformationen mehr verfügbar und ich war wieder bei 'AfxInternalPumpMessage()' gelandet.
COM Objekte habe ich keine verwendet.
-
Wie soll die MFC beendet werden, wenn das Hauptfenster nicht zerstört wird?
Nur dann wird auch PostQuitMessage aufgerufen.
-
Nee, die Absicht das Fenster zu zerstören gibt es schon: 'OnClose()' wird aufgerufen. Beim debuggen hat sich nur rausgestellt dass es niemals bis zu 'DestroyWindow()' kommt. Irgendwo davor bleibt das Programm hängen. Nur wo kriege ich nicht raus...
-
Debuggen? Break All und entsprechnd den Callstack ansehen?
Zur Not Minidumps?
-
Hab den Fehler jetzt endlich entdeckt!
In meiner CDocument-SubClass habe ich 'OnCloseDocument()' überschrieben aber nicht 'CDocument::OnCloseDocument()' aufgerufen.....
Trotzdem vielen Dank!