![]() |
Programm schließt sich nicht
Ich habe eben ein etwas umfangreicheres Programm umgeschrieben. Alles funktioniert bis auf das Schließen des Programms.
Ich schließe das Programm über das MainMenu. Das MainMenu-Item ruft Close; auf. Der Rest erklärt sich von selbst. Ich habe jeglichen Code bereits rausgenommen, der verdächtig ist und blockieren könnte. Das Programm wird nach Punkt 3 nicht mehr angezeigt, es befindet sich aber noch im TaskManager.
Delphi-Quellcode:
Entweder spinnt da was gewaltig oder ich übersehe da gerade etwas und sollte mich schämen.
procedure TForm1.CloseProgramClick(Sender: TObject);
begin ShowMessage('1) CloseProgramClick'); Close; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin ShowMessage('2) FormCloseQuery'); CanClose := True; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ShowMessage('3) FormClose'); end; procedure TForm1.FormDestroy(Sender: TObject); begin ShowMessage('4) FormDestroy'); end; |
AW: Programm schließt sich nicht
Was hindert dich daran im Debugger auf Pause zu drücken und zu schauen wo das Programm im Ablauf grade steht?
|
AW: Programm schließt sich nicht
Mein Unwissen. Ich sehe nur eine lange Liste voll Assembler-Code.
Markiert ist aber Zitat:
|
AW: Programm schließt sich nicht
Ok, das ist bitter. Hast du wirklich im Hauptthread geschaut? Wenn der Debugger mittendrin anhält ist es ja nicht zwangsläufig einer mit Delphi-Code.
Ansonsten könntest du in der DPR-Datei einen Haltepunkt auf das letzte
Delphi-Quellcode:
setzen und mit F7 schauen wie es weitergeht. Ein Delphi-Programm hängt z.B. bis zum Sankt Nimmerleinstag und alle Threads aus
end.
Delphi-Quellcode:
zu schließen.
System.Threading.TThreadPool.Default
|
AW: Programm schließt sich nicht
Nach einer langen Suche habe ich den Verdächtigen gefunden.
Beim Programmstart starte ich einen TTask der eine while-Schleife abarbeitet. Im Prinzip wartet er nur ein bisschen (etwa 2 Sekunden). Die Schleife prüft die Variable i gegen eine feste Zahl. Beispielsweise 10000. In der While-Schleife steht Sleep(1) und Inc(i). Das Problem war, dass die Variable i außerhalb von TTask deklariert war. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz