Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi "OnIdle" per WinAPI (https://www.delphipraxis.net/85704-onidle-per-winapi.html)

3_of_8 3. Feb 2007 15:14


"OnIdle" per WinAPI
 
Morgen.

Ich habe mir ein Fenster mit einer WndProc erstellt und will jetzt, dass eine Funktion aufgerufen wird, wenn die Anwendung gerade "idlet", also so wie bei TApplication.OnIdle. In der Fensterprozedur funktioniert das ganze nicht wirklich und bei meiner Messageschleife geht das komischerweise nur dann, wenn das Fenster gerade Messages empfängt. (Verstehe ich ehrlich gesagt nicht, denn die Schleife wird ja ständig abgearbeitet, nicht nur wenn grad Messages da sind.)

jbg 3. Feb 2007 15:50

Re: "OnIdle" per WinAPI
 
Zitat:

Zitat von 3_of_8
Verstehe ich ehrlich gesagt nicht, denn die Schleife wird ja ständig abgearbeitet, nicht nur wenn grad Messages da sind.

Das denkst du. Es besteht aber ein Unterschied zwischen GetMessage() und PeekMessage(..., PM_REMOVE). GetMessage() ruft intern WaitMessage() auf, womit GetMessage() nur zurückkehrt, wenn eine Botschaft vorhanden ist. Ist keine da, wird der aktuelle Thread schlafen gelegt bis eine Message kommt. Da z.B Application.ProcessMessages PeekMessage() benutzt schnallt die CPU belastung dabei auf 100% hoch, wenn es in einer Schleife ausgeführt wird; wohingegen GetMessage() nahezu 0% CPU Last verschlinkt.

3_of_8 3. Feb 2007 16:25

Re: "OnIdle" per WinAPI
 
*kratz*

Und wie ist das dann mit dem OnIdle?

jbg 3. Feb 2007 16:47

Re: "OnIdle" per WinAPI
 
Schau dir den Code doch einfach mal an.

Die VCL nutzt PeekMessage(..., PM_REMOVE), ruft aber im TApplication.DoIdle die WaitMessage API Funktion auf (sofern Done auf True gesetzt wurde).

3_of_8 3. Feb 2007 18:21

Re: "OnIdle" per WinAPI
 
Nicht alle sind glückliche Besitzer einer Professional-Version. ;)

jbg 3. Feb 2007 18:43

Re: "OnIdle" per WinAPI
 
Wofür brauchst du eine Professional Version. Turbo Delphi Explorer kommt mit vollem VCL und RTL Quellcode daher.

3_of_8 3. Feb 2007 18:55

Re: "OnIdle" per WinAPI
 
Ja, aber das Ding läuft nicht auf meinem Notebook. Jedenfalls habe ich keine Quellcodedateien. Sonst hätte ich schon längst nachgeschaut. Mit PeekMessage() klappt das ganze jetzt jedenfalls, danke.

jbg 3. Feb 2007 19:22

Re: "OnIdle" per WinAPI
 
Zitat:

Zitat von 3_of_8
Jedenfalls habe ich keine Quellcodedateien. Sonst hätte ich schon längst nachgeschaut.

Du musst nur den vorgeschalteten Selfextractor ausführen. Danach sollte in dessen "temporären" Verzeichnis der "Source" Ordner zu finden sein. Die volle Installation musst du dabei nicht durchlaufen.


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