AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Verständnisfrage zu Unit: Initialization und Finalization
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zu Unit: Initialization und Finalization

Ein Thema von Assertor · begonnen am 25. Mai 2007 · letzter Beitrag vom 5. Okt 2016
Antwort Antwort
Seite 1 von 2  1 2      
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Verständnisfrage zu Unit: Initialization und Finalization

  Alt 25. Mai 2007, 11:57
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
Frederik
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:00
Initialization und finalization werden bei Programmstart respektive Programmende genau einmal aufgerufen. Die Reihenfolge hat Delphi beim Kompilieren ausgerechnet.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:07
Hallo und Danke Robert,

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 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
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#4

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:11
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:15
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.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:18
Phoenix, genau das sage ich ja. es wird beim Kompilieren des EXEs ausgerechnet (im Rahmen der Codegenerierung) wie die Reihenfolge zu sein hat.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#7

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:30
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
Gruß winkel79
Frederik
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:34
JA!
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#9

Re: Verständnisfrage zu Unit: Initialization und Finalizatio

  Alt 25. Mai 2007, 12:44
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.



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!
Frederik
  Mit Zitat antworten Zitat
Prakti16

Registriert seit: 26. Sep 2016
23 Beiträge
 
#10

AW: Verständnisfrage zu Unit: Initialization und Finalization

  Alt 30. Sep 2016, 15:29
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:59 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