![]() |
wait prozedur bewirkt vollständige cpu auslastung
tach zusammen,
ich benutze in einem service folgende wait prozedure:
Delphi-Quellcode:
diese schluckt aber leider 100% cpu last. was habe ich falsch gemacht?
procedure wait;
var res : Cardinal; s : String; begin repeat Res := MsgWaitForMultipleObjects(2, hndlArr, false, 3600000, QS_ALLINPUT); if (Res = $ffffffff) then RaiseLastOSError; if Res = 1 then ForceUpdate := true; s := IntToStr(Res); until (Res = WAIT_OBJECT_0) or (Res = WAIT_TIMEOUT) or (Res = 1); end; ich hoffe einige leute haben verbesserungsvorschläge :) ps: res = 1 tritt auf, wenn eins der beiden events aus dem handlearray ausgelöst werden mfg Jonny |
Re: wait prozedur bewirkt vollständige cpu auslastung
Du hast den Code unterschlagen, der das Array hndlArr befüllt.
Hat der Service eine Benutzeroberfläche? Falls nicht, gibt es keinen Grund für QS_ALLINPUT. |
Re: wait prozedur bewirkt vollständige cpu auslastung
Bringt in der Schleife viellecht ein Application.ProcressMessages was? :gruebel:
|
Re: wait prozedur bewirkt vollständige cpu auslastung
Hallo,
Zitat:
Gruß xaromz |
Re: wait prozedur bewirkt vollständige cpu auslastung
|
Re: wait prozedur bewirkt vollständige cpu auslastung
servus,
also mein service hat keine oberfläche, und das hndlArr wird wie folgt befüllt:
Delphi-Quellcode:
den vorgeschlagene thread lese ich mir gleich mal durch.
hndlarr[0] := Event1.Handle;
hndlarr[1] := Event2.Handle; mfg Jonny |
Re: wait prozedur bewirkt vollständige cpu auslastung
kurzer nachtrag:
ich habe mir gerade den vorgeschlagenen thread von klaus durchgelesen, aber auch die folgende prozedur
Delphi-Quellcode:
bringt 100% cpu auslastung
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; begin Event := GetCurrentThread; Tick := GetTickCount + DWord(Milliseconds); while Milliseconds > 0 do case MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) of WAIT_TIMEOUT: Exit; WAIT_OBJECT_0: WriteLn('Fails'); else begin Application.ProcessMessages; Milliseconds := Tick - GetTickcount; end; end; end; |
Re: wait prozedur bewirkt vollständige cpu auslastung
Deine letzte Funktion bringt bei mir in einer Consolenanwendung auch 100% CPU Last.
Die folgende Funktion bringt bei eine CPU Last von 3-4%.
Delphi-Quellcode:
Grüßeprocedure Delay(Milliseconds: Integer); {by Hagen Redmann} var Tick: DWORD; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWORD(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickCount; end; finally CloseHandle(Event); end; end; Klaus |
Re: wait prozedur bewirkt vollständige cpu auslastung
moin klaus,
ich kann leider nicht in meinem service application.processmessages benutzen :( mfg Jonny |
Re: wait prozedur bewirkt vollständige cpu auslastung
Nun, von Services habe ich keine Ahnung (hab' noch nie einen programmiert) deshalb jetzt
meine etwas dümmliche Frage: Geht es auch nicht wenn Du die Unit Forms einbindest? Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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