Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi code bereich vor prog.terminierung schützen (https://www.delphipraxis.net/34556-code-bereich-vor-prog-terminierung-schuetzen.html)

supermuckl 24. Nov 2004 16:27


code bereich vor prog.terminierung schützen
 
hallo.

ich habe mir überlegt, ob in meiner multithreading anwendung, die in verschiedenen datenbanken mit MMF, datenblöcke schreibt, das ich dort eventuell wärend dem schreiben das programm ausversehen beenden könnte und somit die datenbank fragmentieren würde ( nur einen bruchteil des datenblocks schreiben würde )

also im klartext:

ich benutze folgenden befehl um meine daten in eine datei zu speichern ( über MemoryMappedFile in linux/windows )
Delphi-Quellcode:
 Move(pointer(input)^, pointer(integer(PFview)+pos)^, len);
meine fragen:

1. kann ich solch einen code überhaupt mittendrin durch ein normales beenden des programmes unter windows bzw unter linux (killall xyz) abbrechen und so ein unvollständiges schreiben provozieren ?

2. kann ich ein beenden des programmes "erkennen" und kurz davor noch den cache flushen ?

3. kann ich diesen codeblock evtl so "einsperren" das hier kein beenden des programmes möglich ist? also das es weiter läuft bis es fertig ist mit schreiben ?

jfheins 24. Nov 2004 16:30

Re: code bereich vor prog.terminierung schützen
 
Wenn du das Programm killst (Taskmanager) kannst du nichts mehr tun.
Andererseits ist es höcht unwahrscheinlich, dass der Benutzer das so hinbekommt, den prozess in diesem Augenblick zu killen.
Und wenn er's doch hinbekommt, ist er selber Schuld ...

jim_raynor 24. Nov 2004 16:32

Re: code bereich vor prog.terminierung schützen
 
Ein Programm wird nicht abrupt beendet (ausser es wird über den Taskmanager wirklich abgeschossen). Normalerweise wird das Beenden per Windows-Message (Linux hab ich keine Ahnung) erledigt. Die laufenden Prozeduren werden also auf jeden Fall abgeschlossen. Gegen das harte Abschiessen über den Taskmanager, wird man vermutlich nichts entgegensetzen, allerdings wird hier auch erstmal versucht auf normalen Weg das Programm zu beenden.

supermuckl 24. Nov 2004 16:41

Re: code bereich vor prog.terminierung schützen
 
es geht halt um eine server anwendung und wenn ich diese neu starten will bzw den server oderso dann sollte ich nacher nicht halbe daten vorfinden *g*

wo wird das beenden also die message entgegen genommen ? im main thread ?

weil jeder client dieser server anwendung ist über indy/tcp mit dem server verbunden und schreibt in die datenbanken
vergleichbar mit mysql

also jeder client hat seine db

und wenn jetzt der mainthread meint, er müsste alles beenden? wie siehts dann mit meinen schreibenden threads aus ?
weil irgendwie müsste da ja indy selbst herausfinden das da noch threads offen sind ( sind ja verbindungen ) und die dann trennen und beenden und darauf warten ?! dann wäre ja meine besorgnis an falscher stelle wenn eh alles abgearbeitet wird..

ich weis es halt nicht sicher wo ich überall reinfingern kann wenn ich das prog *normal* beende

..schwer auszudrücken ;)

//edit
ich glaub ich beschreib es mal genauer:

die clients sind immer verbunden über indy tcp
und wenn sie was schreiben wollen ( alle 5 sekunden ca )
dann wird OnExecute ausgeführt und dort steht unter anderem dieses drin:
Delphi-Quellcode:
 if actclient.mode = 'w' then begin
     // spy client
    if (copy(line,0,4) = 'DATA') then begin

    d := copy(line,5,12);
    //datetimetostring(d,'yymmddhhnnss',now);
    actclient.mmf.WriteDFFrameCached(copy(line,17,9999),d);

    end;

 end;
actclient.mmf.WriteDFFrameCached(copy(line,17,9999 ),d); <- damit schreibe ich ( sehr viele weiter unterfunktionen ) in die DB

frage:
-werden diese funktion und die unterfunktionen überhaupt in einem thread ausgeführt ?
-und wann wird hier das prog beendet bei normalen beenden ?


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