Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Programm schließt sich nicht (https://www.delphipraxis.net/198039-programm-schliesst-sich-nicht.html)

DieDolly 28. Sep 2018 12:18

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:
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;
Entweder spinnt da was gewaltig oder ich übersehe da gerade etwas und sollte mich schämen.

Der schöne Günther 28. Sep 2018 12:20

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?

DieDolly 28. Sep 2018 12:24

AW: Programm schließt sich nicht
 
Mein Unwissen. Ich sehe nur eine lange Liste voll Assembler-Code.

Markiert ist aber
Zitat:

ntdll.RtlUserThreadStart:
778F01C4 89442404 mov [esp+$04],eax
^

Der schöne Günther 28. Sep 2018 13:08

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:
end.
setzen und mit F7 schauen wie es weitergeht. Ein Delphi-Programm hängt z.B. bis zum Sankt Nimmerleinstag und alle Threads aus
Delphi-Quellcode:
System.Threading.TThreadPool.Default
zu schließen.

DieDolly 28. Sep 2018 13:10

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 10:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz