Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Application.ProcessMessages; (https://www.delphipraxis.net/437-application-processmessages%3B.html)

CalganX 21. Jul 2002 15:36


Application.ProcessMessages;
 
Ja, wat is dat:
Code:
Application.ProcessMessages;
In vielen Codes zusehen und sehr nützlich (habe es in einem Programm eingebaut, seit dem läuft es ganz brav).
Ich weiß, es gibt da sowas wie Hilfe, aber daraus werde ich nicht schlau.

Chris1308

Alfons_G 21. Jul 2002 15:53

:hi:
Einfach ausgedrückt, ermöglicht ProcessMessages, dass Windows zum Zuge kommt und seine Warteschlange aufräumt. Dazu gehört z.B. das Neuzeichnen Deines Formulares, falls es von anderen Fenstern überdeckt war u.dgl.

Wenn eine Anwendung Anweisungen enthält, welche sehr langwierig sind, sollte man diesen Befehl einbauen, da Windows sonst erst zum Zuge kommt, wenn eine Funktion aufgerufen wirsd, die ohnehin auf die Windows-Nachrichten-Warteschlange zugreift. Falls Du z.B. langwierige Berechnungen vornimmst, sorgt ProcessMessages dafür, dass Dein Fenster wieder in Ordnung gebracht wird, falls es von anderen Programmen verdeckt war.

Nachdem der Aufruf natürlich Zeit kostet, soll man ihn aber nur an Stellen einbauen, wo der Befehl nicht extrem häufig aufgerufen wird.

:coder:

CalganX 21. Jul 2002 16:00

Zitat:

Zitat von Alfons_G
Nachdem der Aufruf natürlich Zeit kostet, soll man ihn aber nur an Stellen einbauen, wo der Befehl nicht extrem häufig aufgerufen wird.

Also Sachen wie TForm1.FormDestroy korrekt?

Chris1308

Daniel 21. Jul 2002 16:05

Hängt davon ab, was Du alles in dieser Ereignisprozedur machst; so allgemein würde ich kein "Application.ProcessMessages" in ein TForm.OnDestroy-Event schreiben. Spätestens wenn das abgearbeitet ist, hat Windows eh' wieder Zeit, sich um seine Warteschlange zu kümmern.


Grüße,
Daniel

Christian Seehase 21. Jul 2002 18:33

Moin Zusammen,

Zitat:

Zitat von Alfons_G
...da Windows sonst erst zum Zuge kommt, wenn eine Funktion aufgerufen wirsd...

Jain, es geht hier nur nicht um Windows, dass hier nicht zum Zuge kommt, sondern die Windows Procedure des jeweiligen Threads.

I.d.R. werden die Messages die an ein Fenster geschickt werden in der Message Queue (Warteschlange) des Threads gepuffert, dem das Fenster "gehört".

Application.ProcessMessages sorgt dann, jedesmal, wenn es aufgerufen wird, dafür, dass diese anstehenden Messages verarbeitet werden.
Deshalb wirkt so ein Aufruf auch oft kaum auf die Geschwindigkeit aus, wenn keine Messages zur Verarbeitung anstehen.

Im OnDestroy Event macht der Aufruf für mich irgendwie nicht ungedingt Sinn.

RomanK 21. Jul 2002 19:55

Hoi

Wenn du einen Abbrechen-Knopf einbauen willst solltest du in langwirigen Berechnungen auch ein ProcessMessages einbauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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