AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm beenden und Speicher freigeben?

Ein Thema von sebl2002 · begonnen am 29. Nov 2005 · letzter Beitrag vom 30. Nov 2005
Antwort Antwort
sebl2002

Registriert seit: 19. Nov 2005
Ort: Bochum
2 Beiträge
 
Delphi 6 Professional
 
#1

Programm beenden und Speicher freigeben?

  Alt 29. Nov 2005, 17:49
Hallo Welt,

ich arbeite gerade an einem Bildschirmschoner, bei dem -unter anderem- über einen Timer JPEGs geladen werden. Mausbewegungen und Tastatureingaben fange ich über Application.OnMessage ab, die ich in FormActivate in eine eigene Prozedur umleite. Bei einem Maus- oder Tastaturevent beende ich die Anwendung mit Application.Mainform.Close. In FormClose wird der reservierte Speicher wieder freigegeben.

Wenn ein solches Event zum Zeitpunkt der Speicherzuweisung oder dem Laden des JPEGs auftritt, bekomme ich eine EAccessViolation. Sofern ich das Programm mit Application.Terminate schließe, kommt dieser Fehler nicht, dafür wird mein Arbeitsspeicher immer ein bisschen weniger.

Wie kann ich es vermeiden, dass das Programm geschlossen wird, wenn der Timer aktiv geworden ist? Hat jemand eine elegante Idee dazu?

Vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat
Palando

Registriert seit: 5. Mai 2005
72 Beiträge
 
#2

Re: Programm beenden und Speicher freigeben?

  Alt 29. Nov 2005, 17:53
Herzlich Willkommen in der DP!


Du könntest jedes mal, wenn ein Timer aktiv wird, die Form.OnCloseQuery auf eine Funktion umleiten die das schließen verbietet und ggf. speichert, dass geschlossen werden sollm, wenn der Timer fertig ist. Am Ende des Timer wird das OnCloseQuery wieder auf die eigentliche Funktion umgeleitet.

Das geht sicher aber besser. Gibts vielleicht ne Form.CanClose property?
Markus
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Programm beenden und Speicher freigeben?

  Alt 29. Nov 2005, 18:22
Zitat von sebl2002:
Bei einem Maus- oder Tastaturevent beende ich die Anwendung mit Application.Mainform.Close.
Damit ziehst du dir evtl. dein Programm unterm A.... weg.
Statt dessen versuche mal Application.Terminate.
So wird das Formular nicht sofort geschlossen, sondern es wird eine Windows-Message WM_QUIT verschickt.
Dein Programm läuft weiter, bis es wieder Messages verarbeiten kann.
Nun gibt es folgenden Nachteil:
es wird der gesamte Initialisierungcode ausgeführt und dann erst beeendet.
Um dies zu beschleunigen ist folgendes zu tun:
Delphi-Quellcode:
procedure TForm1.Timer1OnTimer(Sender: ...);
begin
   if Application.Terminated then
      Exit;
   Image1.LoadFromFile(....);
end;
Andreas
  Mit Zitat antworten Zitat
sebl2002

Registriert seit: 19. Nov 2005
Ort: Bochum
2 Beiträge
 
Delphi 6 Professional
 
#4

Re: Programm beenden und Speicher freigeben?

  Alt 30. Nov 2005, 08:30
Zitat:
Statt dessen versuche mal Application.Terminate.
Das hatte ich ja vorher schon probiert - allerdings hatte ich die Befehle zum Speicher freiräumen in FormOnClose stehen, so dass diese nicht ausgeführt wurden.

Jetzt setze ich Application.Terminate ein und räume den Speicher in FormDestroy frei. Das funzt.

Danke für die Tipps!
  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 05:00 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