Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Verständnisfrage zu Unit: Initialization und Finalization (https://www.delphipraxis.net/92750-verstaendnisfrage-zu-unit-initialization-und-finalization.html)

Assertor 25. Mai 2007 10:57


Verständnisfrage zu Unit: Initialization und Finalization
 
Hallo,

ich bin grad am Überlegen, "wie oft" die Initialization und Finalization einer Unit aufgerufen wird.

Meine Unit steht in verschiedenen Forms und nimmt auch Anpassungen an Application.Irgendwas und den Screen.Cursors vor. Ich möchte natürlich Overhead vermeiden...

Ein einfacher "Beep"-Test bei dem ich ein Beep in der Initialization eingebaut hatte brachte nur "ein Beep" (Zitat "Geben Sie mir ein Ping" ;).

Was sagt Ihr?

Gruß + Danke
Winkel79

Robert Marquardt 25. Mai 2007 11:00

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Initialization und finalization werden bei Programmstart respektive Programmende genau einmal aufgerufen. Die Reihenfolge hat Delphi beim Kompilieren ausgerechnet.

Assertor 25. Mai 2007 11:07

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Hallo und Danke Robert,

Zitat:

Zitat von Robert Marquardt
Initialization und finalization werden bei Programmstart respektive Programmende genau einmal aufgerufen. Die Reihenfolge hat Delphi beim Kompilieren ausgerechnet.

Gilt das auch für die Wiederverwendung der Unit für andere Zwecke in anderen Forms (hier im Implementation-Teil):

Zitat:

Zitat von Delphi OH
Der initialization-Abschnitt
...
Für Units in der uses-Liste von Interfaces werden die von einem Client verwendeten initialization-Abschnitte von Units in der Reihenfolge ausgeführt, in der Units in der uses-Klausel des Clients aufgeführt sind.

Ich schließe aus dem "Interfaces": Ja.

Zur Erklärung: Ich habe alle Kompatibilitätsfunktionen in eine Unit gepackt. Hier werden per Initialization die OS-Bedingungen abgefragt, die eigene Dateiversion ausgelesen, Cursor und Hints/Tooltips an Vista angepasst, VistaAltFix und TaskBarFix etc.pp.

Zusätzlich enthält die Unit Basisfunktionen, wie z.B. ein Ansi/Unicode-ShellExecuteAndWait etc.

Ich möchte natürlich, daß die Anpassungen und der VistaAltFix nur einmal instanziert werden - auch um Zeit und Ressourcen zu sparen. Ich bin jetzt schon mal mit dem SamplingProfiler (1.4.irgendwas) rangegangen, aber weiß auf die schnelle nicht, wie man das gescheit prüfen könnte.

Gruß winkel79

Phoenix 25. Mai 2007 11:11

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Zitat:

Zitat von Robert Marquardt
Die Reihenfolge hat Delphi beim Kompilieren ausgerechnet.

Jain, das ist nicht so ganz richtig.
Die Reihenfolge bestimmt sich aus der Reihenfolge, in der die Units im Projekt verwendet werden.
Wenn z.B. die Anwendung Form 1 und Form verwendet, und Form1 verwendet Unit1 und Unit2 und Form 2 verwendet Unit1 und Unit3, dann ist die Reihenfolge entsprechend: Unit1 (aus Form1 inkludiert), Unit2 (aus Form1 inkludiert), Form1 (erst jetzt, weil ja schon Initialized-Objekte aus Unit1 und Unit2 benutzt werden könnten), Unit3 (aus Form2 inkludiert), Form2 - das jetzt auch auf Initialisierte Objekte der Units 1 und 3 zugreifen kann.

Robert Marquardt 25. Mai 2007 11:15

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Nur genau einmal. Wie oft die Unit im Programm verwendet wird hat damit nichts zu tun.
Beim Programmstart werden die initialization Sections der Reihe nach abgearbeitet (entsprechend die finalization Sections beim Programmende).

Welche Unit welche andere Unit verwendet beeinflusst nur die Reihenfolge der Abarbeitung. Das wird zur Kompilationszeit entschieden (es ist vollstaendig entscheidbar). Bei Programmausfuehrung ist die Reihenfolge also immer gleich.

Forms sind normale Objekte, die sowieso erst nach Ende der Initializaton erstellt werden koennen.Erst dann kommt der Code im .dpr dran.

Robert Marquardt 25. Mai 2007 11:18

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Phoenix, genau das sage ich ja. es wird beim Kompilieren des EXEs ausgerechnet (im Rahmen der Codegenerierung) wie die Reihenfolge zu sein hat.

Assertor 25. Mai 2007 11:30

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Das ist zwar sehr informativ, aber um die Frage kürzer (einfacher) zu machen:

Wir der Initialization-Teil einer Unit nur -genau einmal- ausgeführt unabhängig davon, ob andere Units und/oder Forms diese Unit ebenfalls verwenden?

Dann versteh ich die Antwort auch, ohne einen weiteren Kaffee ;)

Danke :zwinker:
Gruß winkel79

Robert Marquardt 25. Mai 2007 11:34

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
JA!

Assertor 25. Mai 2007 11:44

Re: Verständnisfrage zu Unit: Initialization und Finalizatio
 
Zitat:

Zitat von Robert Marquardt
JA!

Danke, Robert. Das ist absolut eindeutig ;) Obwohl, jetzt lese ich mir Eure Diskussion nochmal durch, der Kaffe ist gerade fertig.

:dp:

Gruß winkel79

Edit: Nun ist der Groschen gefallen. Wobei dies eher die Funktionsweise bzw. "Intelligenz" des Compilers beschreibt. Ich fand nur, daß die Delphi OH sich - wie so oft - einer relativ undeterminierten Sprache bedient. Danke Euch beiden!

Prakti16 30. Sep 2016 14:29

AW: Verständnisfrage zu Unit: Initialization und Finalization
 
Ich weiß dieses Thema ist alter aber ich habe dazu eine Frage.
Und zwar wie ich eine Initialization und Finalization schreibe ich habe mich da durch gelesen aber ich bin ein Anfänger und habe es nicht so richtig verstanden.
könnte mir jemand einen kurzen Quelltext darüber schreiben als beispiel damit ich es zu mindest um den Text zu verstehen darüber ein Beispiel bekommen ( wenn es geht bitte vereinfacht ).
Danke wenn das jemand ließt und meine frage beantwortet


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.
Seite 1 von 2  1 2      

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