Einzelnen Beitrag anzeigen

jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 08:43
Zitat von Bernhard Geyer:
Zitat von jottkaerr:
Die Reihenfolge der Abarbeitung der initialization-Abschnitte wird mit Sicherheit nicht mehr geändert werden. Sie ist nämlich dokumentiert,
Quelle?

In der Delphi-5-Hilfe, besonders der zweite Absatz:

Zitat von Delphi-Hilfe:
Der initialization-Abschnitt

Der initialization-Abschnitt ist optional. Er beginnt mit dem reservierten Wort initialization und endet mit dem Beginn des finalization-Abschnitts oder - wenn kein finalization-Abschnitt vorhanden ist - mit dem Ende der Unit. Der initialization-Abschnitt enthält Anweisungen, die beim Programmstart in der angegebenen Reihenfolge ausgeführt werden. Arbeiten Sie beispielsweise mit definierten Datenstrukturen, können Sie diese im initialization-Abschnitt initialisieren.

Die initialization-Abschnitte von Units, die von Clients eingebunden werden, werden in der Reihenfolge ausgeführt, in der die Units in der uses-Klausel des Clients angegeben sind.
Mit Clients sind Units und DPR-Dateien gemeint, die andere Units einbinden.

Zitat von Bernhard Geyer:
Zitat von jottkaerr:
und es gibt viel zu viele Quelltexte, die sich darauf verlassen. Den auf eine solche Änderung folgenden Aufschrei, auch der eigenen Entwickler, will Embarcadero bzw. Codegear nicht hören.
Ich wüsste nicht wo in unserem Programm die Init-Reihenfolge der Units relevant wäre?
Wenn eine Unit ein globales Objekt bereitstellt, z.B. ein Singleton, muss sichergestellt sein, dass dieses Objekt auch in initialization-Abschnitten von Units, die eben diese Unit einbinden, schon existiert. Das lässt sich nur über eine definierte Abarbeitungsreihenfolge der initialization-Abschnitte erreichen. (Oder durch eine on-the-fly-Erstellung des Singletons. Durch die o.g. Regel kann man sich aber das dazu notwendige Überprüfen, ob das Objekt bereits erzeugt wurde, sparen, wenn das Objekt sowieso in den meisten oder fast allen Fällen benötigt wird.)

Zitat von Bernhard Geyer:
Und da du ja nur auf globale Variablen von Units zugreifen kannst die du auch used ist auf jeden Fall in dieser Unit die initalisierung schon durchgeführt bevor irgendeine Quellcodezeile deiner Unit aufgerufen wird. Es gilt die Regel die taaktaak beschrieben hat.
Habe ich dem irgendwo widersprochen? Ich bezog mich nur auf die Aussage von Christian.

jkr
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat