AGB  ·  Datenschutz  ·  Impressum  







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

Application.Terminate in Vista

Ein Thema von PeterPanino · begonnen am 30. Apr 2007 · letzter Beitrag vom 1. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Application.Terminate in Vista

  Alt 30. Apr 2007, 12:06
Aber so viel ich weiß, werden dann keine DLLs mehr entladen. Allerdings bin ich mir da nicht ganz sicher.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#12

Re: Application.Terminate in Vista

  Alt 30. Apr 2007, 12:32
Ich kenne das unter Vista hauptsächlich mit Indy 9: Indy 9 ist da ganz gemein und gibt eine critical section nicht frei (selbst wenn man die Units nur einbindet, aber nicht benutzt - muß wohl am initialization-Teil einer der Units liegen), hab deswegen alle Programme, die ich aus rausgebe, auf Synapse umgestellt. Eigene ähnliche Fehler sind natürlich genauso kritisch, daher ganz allgemein: FastMM4 benutzen und alle Memory Leaks beheben, wenn das Programm dann mal ohne Leaks beendet, dann klappts auch mit Vista
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Application.Terminate in Vista

  Alt 30. Apr 2007, 12:42
Moin Peter,

Zitat von PeterPanino:
Der Aufruf von Application.Terminate erfolgt im OnCreate-Event des Hauptformulars.
das klingt für mich so, als solltest Du Deine Programmstruktur mal überdenken.
Wenn irgendeine Prüfung an der genannten Stelle dazu führt, dass das Programm nicht weiterlaufen soll, solltest Du die Prüfung lieber in der Projektdatei vornehmen.

BTW:
Application.Terminate verwende ich auch ungern, da hier, u.A., OnCloseQuery/OnClose nicht aufgerufen werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: Application.Terminate in Vista

  Alt 30. Apr 2007, 13:35
Zitat von Christian Seehase:
Zitat von PeterPanino:
Der Aufruf von Application.Terminate erfolgt im OnCreate-Event des Hauptformulars.
das klingt für mich so, als solltest Du Deine Programmstruktur mal überdenken.
Da kann ich nur zustimmen. PostQuitMessage legt nämlich einfach eine Meldung in die Message-Queue, die vom Programm dann in der normalen Meldungsschleife abgeholt und verarbeitet wird (oder auch nicht: das "while GetMessage(...) do ..." bricht dann nämlich ab, da die Bedingung FALSE ist).

An diesen Punkt (Meldungsschleife) kommt die Anwendung aber normalerweise erst in Application.Run. Also werden alle automatisch erzeugten Formulare, Berichte und Datenmodule (alles was in der DPR-Datei vor dem Application.Run steht) zunächst noch erzeugt (laufen also durch das OnCreate), bevor dein Application.Terminate Wirkung zeigt.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Application.Terminate in Vista

  Alt 1. Mai 2007, 12:34
Zitat von Flocke:
... An diesen Punkt (Meldungsschleife) kommt die Anwendung aber normalerweise erst in Application.Run. Also werden alle automatisch erzeugten Formulare, Berichte und Datenmodule (alles was in der DPR-Datei vor dem Application.Run steht) zunächst noch erzeugt (laufen also durch das OnCreate), bevor dein Application.Terminate Wirkung zeigt.
Danke für diese genaue Schilderung, die mit dem von mir beobachteten Verhalten übereinstimmt. Ich verwende nun doch Halt vor Application.Initialize (natürlich mit Fehlermeldung) um beim Fehlen von für die Anwendung vitalen Elementen das Programm zu beenden.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Application.Terminate in Vista

  Alt 1. Mai 2007, 12:37
Zitat von Christian Seehase:
Wenn irgendeine Prüfung an der genannten Stelle dazu führt, dass das Programm nicht weiterlaufen soll, solltest Du die Prüfung lieber in der Projektdatei vornehmen.
Ja, das mache ich jetzt, danke für den Hinweis.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Application.Terminate in Vista

  Alt 1. Mai 2007, 13:05
Moin Peter,

Zitat von PeterPanino:
Ich verwende nun doch Halt vor Application.Initialize (natürlich mit Fehlermeldung) um beim Fehlen von für die Anwendung vitalen Elementen das Programm zu beenden.
Auf das Halt kannst Du verzichten.

Delphi-Quellcode:
begin
  // Prüfung der Programmvoraussetzungen
  if Fehler then begin
    // Sprechende Meldung(en) ausgeben
  end else begin
    Application.Initialize;
    Application.CreateForm(....);
    Application.Run;
  end;
end.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:36 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