![]() |
Delphi-Version: 10.3 Rio
Konsolenanwendung Programmende abfragen
Hallo zusammen,
ich habe eine Konsolenanwendung und möchte abfragen, ob das Programm gerade beendet wird. Bei VCL Anwendungen geht das ja mit
Delphi-Quellcode:
if csDestroying in Application.ComponentState then ...
Application ist aber in der Unit Forms deklariert. Kann ich das trotzdem verwenden, indem ich forms.pas einbinde oder gibt es eine Entsprechung bei Konsolenanwendungen? Vielen Dank im Voraus |
AW: Konsolenanwendung Programmende abfragen
Zitat:
Was genau ist denn das eigentliche Problem, das Du lösen willst? |
AW: Konsolenanwendung Programmende abfragen
Nja, normal hat man bei Konsolen ja alles hintereinander.
Also einfach den Code für's Ende ans Ende der DPR. Normal hat die Konsolen-Vorlage ein Try-Except, welches Exceptions nicht neu auslöst, also einfach nach dessen END diesen Code, oder nochmal ein Try-Finally drumrum. * So, das war jetzt für das normale Programmende oder wenn eine Exception in deinem Programmcode auftritt. * Dann gibt es noch den Fall von Strg+C oder Strg+Untbr, sollte das eine Exception auslösen und abbrechen. * Was das Schließen des Konsolenfensters macht, weiß ich grade nicht. (sowas wie SIGKILL, SIGTERM, SIGINT oder SIGQUIT verhält sich ja unterschiedlich) * Einen "richtigen" Abschuss des Programms (Terminate) bekommst'e natürlich garnicht mit, weil dein Programm hart abgeschossen wird und nichts mehr ausführt Geht es wirklich um Threads, dann mußt du das selbst regeln. * im Hauptthread den Threads Bescheid geben * und womöglich auf das Ende der Threads warten * wartest du nicht, dann werden deine Threads hart abgeschossen ... vor allen, weil Delphi beim ProgrammEnde (des Hauptthreads) ein ![]() * Grundsächlich schißet "normal" Windows immer den kompletten Prozess ab (Terminate), wenn eine Exception in irgendeinem Thread (auch dem Hauptthread) bis zum Windows durchrauscht, drum fängt TThrad Exceptions still und heimlich ab (wenn man es im OnTerminate nicht prüft) |
AW: Konsolenanwendung Programmende abfragen
Zitat:
To capture these events you need to use SetConsoleCtrlHandler ![]() ![]() Something like this :
Code:
function HandlerRoutine(dwCtrlType: DWORD): Bool; stdcall;
begin Result := false; if (CTRL_C_EVENT = dwCtrlType) or (CTRL_BREAK_EVENT = dwCtrlType) then begin Result := true; end; end; // setup the callback routine SetConsoleCtrlHandler(@HandlerRoutine, True); |
AW: Konsolenanwendung Programmende abfragen
Delphi-Quellcode:
im Hauptprogramm zwischen
Try ... finally
Delphi-Quellcode:
und
begin
Delphi-Quellcode:
.
end;
Was in finally kommt ist dann ganz zum Schluss. |
AW: Konsolenanwendung Programmende abfragen
Ich danke euch für eure Antworten. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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