AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programm abrupt beenden ohne Memory Leaks
Thema durchsuchen
Ansicht
Themen-Optionen

Programm abrupt beenden ohne Memory Leaks

Ein Thema von blackdrake · begonnen am 10. Sep 2007 · letzter Beitrag vom 15. Sep 2007
Antwort Antwort
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: Programm abrupt beenden ohne Memory Leaks

  Alt 11. Sep 2007, 07:47
Hallo.

Zitat von negaH:
was auch ziemlich dämlich wäre da du damit diese Source abhängig machst von einer rießigen VCL
Ja, ich weiß, dass eine Unit nicht auf Forms/Application zugreifen sollte. Ich habe ja nicht gesagt, dass die Units dieses Feature bräuchten oder dass es sinnvoll sei, dass unabhängige Units application.terminated berücksichtigen.

Zitat von negaH:
1.) ein Variable FAbort:Boolean in dein TForm einbauen
2.) deine Methode die alles macht per try except Block schützen und auf EAbort reagieren
3.) einen Button auf's TForm der FAbort auf TRUE setzt
4.) in deiner Methode .Process() bei FAbort = TRUE die Prozedure Abort aufrufen
Danke für die Tipps. Die Progress-Klasse verwende ich bereits folgendermaßen, um den Fortschritt in einer Gauge darzustellen:

Delphi-Quellcode:
TProgress = class(TInterfacedObject, IDECProgress)
  procedure Process(const Min, Max, Pos: Int64); stdcall;
  constructor Create;
  destructor Destroy; override;
end;
Ich verstehe aber nicht ganz, was du mit Punkt #2 meinst. Wie soll ich auf FAbort reagieren? Wie bekomme ich es hin, dass FAbort dazu führt, dass TCipher_xyz.EncodeFile etc. abbricht? Die einzigste Methode die mir einfällt, ist den Stream freizugeben und die Exceptions zu verschlucken (siehe Idee #1 ganz oben). Das scheint mir aber ziemlich unprofessionell, weil ich Speicher freigebe, der noch genutzt wird, um so die laufende Aktion zu terminieren. Außerdem verschlucke ich Exceptions (siehe http://www.delphipraxis.net/internal...=206667#206667 , Sünde #1). Wie soll ich anders auf FAboirt reagieren?

Das mit den TStream Descants verstehe ich auch nicht ganz. Das es eine Callback-Funktion gibt, verstehe ich. Aber wie gehe ich bei diesem Descants bei einer Termination vor? Gebe ich dann auch den Stream einfach frei und verschlucke die Exceptions, wenn ich eine Termination des Programmes wünsche?

Sobald ich wieder zuhause bin, probiere ich mal mit Delphi das ganze aus.

Nachtrag:

Zitat von negaH:
1.) eine OnClick() muß reentrant werden, zb. durch Disablen des Buttons oder durch ein Locking
Verstehe leider nicht, was du meinst. Im ersten Beitrag habe ich Button1OnClick als Beispiel einer Benutzeraktion verwendet.

Zitat von negaH:
2.) OnCloseQuery des Form benutzen und dort erst dann TRUE zurückliefern wenn deine Berechnungsfunktion/Loop beendet wurde.
Erstmal muss ich es schaffen, die laufende DEC/KaZIP/ZLIB Aktion zuende zu führen. Dann muss ich gucken, wie ich ermitteln kann, ob das Programm gerade beschäftigt ist, oder nicht.

Gruß
blackdrake
Daniel Marschall
  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 07:11 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 by Thomas Breitkreuz