![]() |
TApplication für Komponente
Wie kann ich auf "Application.Terminated" und "Application.ProcessMessages" von einer Komponente aus zugreifen?
|
Re: TApplication für Komponente
Uses-Anweisung um Forms ergänzen?
|
Re: TApplication für Komponente
Warum? Wer Application.ProcessMessages in einer Komponente braucht hat die VCL nicht richtig verstanden.
|
Re: TApplication für Komponente
Zitat:
Mit Application.ProcessMessages kann man in teufels Küche kommen wenn man nicht aufpasst und sich "versehentlich" während Berechnungen das berechnende Objekt löschen. |
Re: TApplication für Komponente
Okay... ProcessMessages ist wirklich ungünstig ;) Dass kann dann der Nutzer machen. Oder ich lagere es in einen Thread aus.
Aber ich bräuchte noch terminated, weil ich eine Pseudo-Endlosschleife habe ... |
Re: TApplication für Komponente
Wieso? Wenn du die Arbeit in einen Thread auslagerst, dann beendest du den Thread natuerlich im Destruktor.
|
Re: TApplication für Komponente
Hab ich nicht klug gesagt ^^ ich meinte damit, die Threadlose möglichkeit ;)
|
Re: TApplication für Komponente
Zitat:
Mich würden Details ernsthaft interessieren. Danke, Christoph |
Re: TApplication für Komponente
Hallo Christoph,
Robert hat das sicher nicht so pauschal gemeint, wie er es geschrieben hat. Kernstück der Indy AntiFreeze Komponente ist beispielsweise Application.ProcessMessages und auch die VCL-Macher haben bei der Kapselung der IDAPI-Schnittstelle einen entsprechenden Herzschrittmacher eingebaut. Tatsache ist, dass man für sowas sehr gute Gründe haben und genau verstehen sollte, was man da tut. Normalerweise werden die Methoden einer Komponente so entworfen, dass sie in kürzest möglicher Zeit die Nachrichten des Dispatchers abarbeiten und die Kontrolle wieder zurückgeben. Freundliche Grüße |
Re: TApplication für Komponente
Die Gemeinheit bei Application.ProcessMessages ist das eben Messages verarbeitet werden. Die eine oder andere Komponente mag es ueberhaupt nicht wenn das passiert. Ltztlich werden alle Methoden/Events von anderen Methoden aufgerufen. Man kann da in garstige Rekursionen laufen. Zusatzlich kann es sehr lange dauern bis ProcessMessages abgearbeitet ist.
Man sollte also ProcessMessages meiden. Eine Komponente sollte passiv am Tropf der Messages haengen. Hintergrundarbeiten macht ein Thread. |
Re: TApplication für Komponente
Ich kann mich meinen Vorrednern nur anschliesen. Du könntest der Komponente ja ein Event (vom Typ TNotifyEvent) namens OnWork hinzufügen und regelmässig abfeuern.
Somit kann der Benutzer deiner Kompo selbst entscheiden, was er damit anfangen möchte. Vielleicht möchte er ja einen PrograssBar bewegen und dann ProccessMessages aufrufen. Keinesfalls solltest du ProcessMessages direkt aus deiner Komponente aufrufen. Dies vermeidet ausserdem, dass du die Unit Forms einbinden musst, was ja bei Konsolenanwendungen unerwüscht wäre. |
Re: TApplication für Komponente
Danke für die Erläuterungen!!
Gruß, Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz