Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TApplication für Komponente (https://www.delphipraxis.net/91881-tapplication-fuer-komponente.html)

xZise 11. Mai 2007 10:09


TApplication für Komponente
 
Wie kann ich auf "Application.Terminated" und "Application.ProcessMessages" von einer Komponente aus zugreifen?

Bernhard Geyer 11. Mai 2007 10:16

Re: TApplication für Komponente
 
Uses-Anweisung um Forms ergänzen?

Robert Marquardt 11. Mai 2007 10:38

Re: TApplication für Komponente
 
Warum? Wer Application.ProcessMessages in einer Komponente braucht hat die VCL nicht richtig verstanden.

Bernhard Geyer 11. Mai 2007 10:48

Re: TApplication für Komponente
 
Zitat:

Zitat von Robert Marquardt
Warum? Wer Application.ProcessMessages in einer Komponente braucht hat die VCL nicht richtig verstanden.

Dast stimmt natürlich auch.
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.

xZise 11. Mai 2007 13:33

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 ...

Robert Marquardt 11. Mai 2007 13:37

Re: TApplication für Komponente
 
Wieso? Wenn du die Arbeit in einen Thread auslagerst, dann beendest du den Thread natuerlich im Destruktor.

xZise 11. Mai 2007 14:30

Re: TApplication für Komponente
 
Hab ich nicht klug gesagt ^^ ich meinte damit, die Threadlose möglichkeit ;)

pertzschc 11. Mai 2007 15:34

Re: TApplication für Komponente
 
Zitat:

Zitat von Robert Marquardt
Warum? Wer Application.ProcessMessages in einer Komponente braucht hat die VCL nicht richtig verstanden.

Könntest Du bitte das nochmal erklären, was Deiner Meinung nach das Problem der Verwendung von Application.ProcessMessages in einer Komponente ist?
Mich würden Details ernsthaft interessieren.

Danke,
Christoph

marabu 11. Mai 2007 16:25

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

Robert Marquardt 11. Mai 2007 17:16

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.
Seite 1 von 2  1 2      

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