Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi wie wird ein programm beendet (https://www.delphipraxis.net/34690-wie-wird-ein-programm-beendet.html)

supermuckl 26. Nov 2004 15:37


wie wird ein programm beendet
 
hab so eine ähnliche frage schon für kylix/linux gestellt aber bis jetzt noch keine antwort erhalten..

im prinzip (rein delphi technisch) müsste ich aber im windows bei einer consolenanwendung die gleichen fragen haben:

-> was passiert wenn ich eine consolenanwendung BEENDE ?
-> kann man sie überhaupt von aussen beenden ? oder wird die dadurch immer GEKILLT ?

-> welcher code wird noch abgearbeitet bzw ausgelassen wenn ich
-> BEENDE ?
-> KILLE ?

-> gibt es möglichkeiten ( ausser OnClose usw ) dies zu steuern ? -> weil in consolenanwendungen hab ich nicht von haus aus diese events

hoffe mir kann jemand genau erklären wie und was da vor sich geht, weil ich aufs beenden reagieren muss bzw es vernachlässigen kann ?

es geht halt um DBs die nicht fragmentiert werden dürfen -> kontrolliertes beenden einer consolenapplikation wünschenswert

supermuckl 26. Nov 2004 17:31

Re: wie wird ein programm beendet
 
also nach längerer suche und informationen im bereich linux hab ich das auf windows übertragen können

und nachdem ich rausgefunden hab, das ich messages abfangen muss, und dies nur mit fenstern machen kann da nur die eine messageloop haben können, und ich aber eine consolenapplication (z.B.) habe, muss ich dort wohl einen thread mit einem unsichtbaren fenster mit der winAPI erstellen das dann die messages auffängt und damit dann global die "runterfahr" procedur für das proggi aktiviert wird

ich hoffe das tut so ;)

messageloop-thread -> flag fürs beenden setzen(mit critical sections) beim beenden der applikation
|
|
|-> indy client thread (loop mit flagüberprüfung + critical section)
-> indy client thread (loop mit flagüberprüfung + critical section)

somit müssten sich die clients dann automatisch closen und die datenbank schliessen

dazu wird der messageloop thread wohl noch einen anderen starten der dann nach einer gewissen zeit alle threads forciert terminiert damit keiner hängen bleiben kann ;)
-> ende

folgende threads sind unter anderem ziemlich hilfreich:
im 2. ist auch was mit console dabei fürs empfangen der close messages innerhalb der console usw -> mal anschauen
http://www.delphipraxis.net/internal...rogramm+wmquit
http://www.delphipraxis.net/internal...rogramm+wmquit

Matze 26. Nov 2004 18:20

Re: wie wird ein programm beendet
 
Falls es dich noch interessiert. Hier steht, was nacheinander abläuft, wenn man ein Programm beendet (nicht killt).

supermuckl 26. Nov 2004 18:26

Re: wie wird ein programm beendet
 
sehr schön :) an die codelib hab ich jetzt auch nich gedacht..


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 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