AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi code bereich vor prog.terminierung schützen
Thema durchsuchen
Ansicht
Themen-Optionen

code bereich vor prog.terminierung schützen

Ein Thema von supermuckl · begonnen am 24. Nov 2004 · letzter Beitrag vom 24. Nov 2004
Antwort Antwort
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#1

code bereich vor prog.terminierung schützen

  Alt 24. Nov 2004, 17:27
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 )
 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 ?
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: code bereich vor prog.terminierung schützen

  Alt 24. Nov 2004, 17:30
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: code bereich vor prog.terminierung schützen

  Alt 24. Nov 2004, 17:32
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: code bereich vor prog.terminierung schützen

  Alt 24. Nov 2004, 17:41
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 = 'wthen 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 ?
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 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