AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programmabbruch mit Speicherbereinigung
Thema durchsuchen
Ansicht
Themen-Optionen

Programmabbruch mit Speicherbereinigung

Ein Thema von hacki · begonnen am 26. Nov 2002 · letzter Beitrag vom 27. Nov 2002
Antwort Antwort
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#1

Programmabbruch mit Speicherbereinigung

  Alt 26. Nov 2002, 21:47
Hallo,

kann mir jemand sagen, wie man im laufenden Betrieb "sauber" ein Programm beendet ? In meinem Fall möchte ich im laufenden Betrieb eine Strukturanpassung der Datenbank vornehmen, schlägt dies fehl (exception), so möchte ich das Programm beenden. Dazu habe ich folgendes versucht:

Code:
MainForm.Free;    // ?????
exit;
Das Prog wird dadurch auch beendet, aber es kommen einige Fehlermeldungen:
  • Zugriffsverletzung bei Adresse ....
  • Die Ausnahme "unknown software exception" ...

Wie kann man es eleganter machen ?

Gruß
Hacki
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 26. Nov 2002, 21:53
mit:
close;
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 26. Nov 2002, 22:05
Hi,

mit Close; , schliesst Du nur Dein Programm, mit Application.Terminate; , kannst Du es richtig aus dem Speicher rausschmeissen. Also "richtig" Beenden.

Grüsse, Daniel
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#4
  Alt 26. Nov 2002, 22:08
Hallo Hacki,

also ich glaube dein Programm wird durch diesen Quelltext nicht beendet, eher durch die Fehlermeldung. Das Form ist nicht das Programm sondern nur ein Bestandteil des Projektes. Die Fehlermeldungen rühren wahrscheinlich daher, daß noch einige Variablen auf Speicherbereiche Zeigen, welcher nicht mehr allociert ist also Zeiger die ins Nirvana zeigen. Greift nun das noch laufende Programm darauf zu, gibts ne Exception und das Programm wird Terminated. Wobei wir beim Stichwort währen. Versuch mal dein Programm mit
Application.Terminate zu beenden. Zu Application kann man das Programm sagen .
Solltest du mit Verketteten Listen arbeiten, müssen die jedoch vorher freigegeben werden, das machst du am Besten im OnClose Ereignis deines Forms. OBjekte werden so weit ich weiß automatisch beim schließen Freigegeben. Mach ich aber immer mit der Try ... Finally Klausel.
Alternative kannst du natürlich auch mit Mainform.Close aus dem MainForm das Programm beenden.

Gruß danielA
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#5
  Alt 27. Nov 2002, 10:53
Zitat von Daniel B:
Hi,

mit Close; , schliesst Du nur Dein Programm, mit Application.Terminate; , kannst Du es richtig aus dem Speicher rausschmeissen. Also "richtig" Beenden.

Grüsse, Daniel
Das is nicht ganz richtig... wenn die Close-Methode der MainForm aufgerufen wird, dann wird (nach einigen Aufräumarbeiten) ebenfalls Application.Terminate aufgrufen. Der Unterschied zwischen Close und Application.Terminate ist der, dass bei einem Aufruf von Application.Terminate keine OnClose Ereignisse mehr aufgerufen werden (ich bin es inzwischen leid immer genau zu erklären warum - einfach mal suchen, ich glaub ich hab das hier eh schonmal ausführlich beschrieben). Jedenfalls sollte man den Aufruf von Application.MainForm.Close immer dem Aufruf von Application.Terminate vorziehen!
Manuel Pöter
  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 02:10 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