![]() |
Rechenzeit zurückgeben
Hallo,
Ich programmiere gerade einen Dienst. Leider verbaucht der Dienst auch 100% CPU Zeit. In einer GUI Anwendung kann ich mit
Delphi-Quellcode:
die Rechenzeit an das System zurückgeben.
App.ProcessMessages;
Leider steht mir die Klasse App in meiner Anwendung nicht zur Vverfügung. Der Relevante Codeteil:
Delphi-Quellcode:
Mir ist klar, daß das Handle 0 nicht gültig ist. Hat jemand eine Idee wie ich die CPU Zeit runter bekomme?
procedure ProcessMessages(hWnd: DWORD);
var Msg: TMsg; begin while PeekMessage(Msg, hWnd, 0, 0, PM_REMOVE) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; PROCEDURE SERVICE_MAIN; BEGIN REPEAT IF NOT paused THEN BEGIN ProcessMessages(0); if SecondsBetween(time, time0)>=timedelta then begin Windows.Beep(2000, 250); time0:=time; end; END; UNTIL stopped; END; |
Re: Rechenzeit zurückgeben
Das liegt an der PeekMessage-Funktion. Kannst du nicht die GetMessage-Funktion verwenden?
|
Re: Rechenzeit zurückgeben
Zitat:
(Und zwar mit einer konstanten 0 wo gbl hWnd (Parameter = 0) benutzt.) Quelltextauszug aus Forms.pas:
Delphi-Quellcode:
{*******************************************************}
{ } { Borland Delphi Visual Component Library } { } { Copyright (c) 1995-2002 Borland Software Corporation } { } {*******************************************************} ... function TApplication.ProcessMessage(var Msg: TMsg): Boolean; var Handled: Boolean; begin Result := False; if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin Result := True; if Msg.Message <> WM_QUIT then begin Handled := False; if Assigned(FOnMessage) then FOnMessage(Msg, Handled); if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then begin TranslateMessage(Msg); DispatchMessage(Msg); end; end else FTerminate := True; end; end; procedure TApplication.ProcessMessages; var Msg: TMsg; begin while ProcessMessage(Msg) do {loop}; end; ... |
Re: Rechenzeit zurückgeben
Danke vorerst Euch beiden.
Ich habe eine Workarrount für mein Problem gefunden. Im Sinne des Befehles SLEEP sage ich dem Programm einfach nichts zu tun. Für meine Zwecke reicht es.
Delphi-Quellcode:
PROCEDURE SERVICE_MAIN;
BEGIN REPEAT IF NOT paused THEN BEGIN sleep(10); if SecondsBetween(time, time0)>=timedelta then begin Windows.Beep(2000, 250); time0:=time; end; END; UNTIL stopped; END; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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