![]() |
Systemdienst stresst CPU
Hallo,
ich wage mich zum ersten Mal an Dienste heran und habe dazu mal alles was ich so an Tutorials und Foreneintragen gefunden habe abgegrast. Die ersten Testbeispiele funktionieren soweit auch (z.B.: ![]() Jetzt habe ich mal ein ganz simples Bsp selber erstellt, welches über einen TTimer verfügt der alle x Sekunden eine Logdatei aktualisiert. Wenn ich den Dienst so starte, dann wird er nach dem Start sofort wieder beendet, weil er sich im Leerlauf befindet. Deshalb habe ich dann die folgende Ereignisprozedur eingebaut:
Delphi-Quellcode:
Die läuft auch, allerdings verursacht dieser Dienst dann mal permanent 50% CPU-Auslastung.
procedure TService1.ServiceExecute(Sender: TService);
begin while not Terminated do begin ServiceThread.ProcessRequests(False); end; end; OK, die while-Schleife ist dafür verantwortlich. Lässt man sie allerdings weg, dann wird der Dienst nach dem Start auch sofort wieder beendet, weil er sich wieder im Leerlauf befindet. Wenn ich ihn in der While-Schleife mit Sleep schlafen lege, dann kann er nicht mehr beendet werden. Ist es tatsächlich erforderlich, einen eigenen Thread zu erzeugen wenn man nur einen Dienst haben möchte, der alle 10 Sekunden eine Prozedur aufruft ohne dabei die CPU auszulasten? Oder wo ist da mein Denkfehler? Danke für ein "auf die Sprünge helfen", RolfPolf |
Re: Systemdienst stresst CPU
Delphi-Quellcode:
Bau ein "Sleep()" ein. :)
procedure TService1.ServiceExecute(Sender: TService);
begin while not Terminated do begin Sleep(100); ServiceThread.ProcessRequests(False); end; end; |
Re: Systemdienst stresst CPU
@ste_ett:
Zitat:
![]() |
Re: Systemdienst stresst CPU
hi,
ich glaube es gibt da von luckie eine gute Anleitung, ansonsten mal bei den Schweizern schauen...., aber ich glaube du musst lediglich beim start vom Dienst eine Rückmeldung an das System geben, das "sich was tut", dann wird der dienst auch nicht beendet. mit welcher delphi version arbeitest du? hinweiß z.b. delphi 5 dienste laufen unter windows 2003 server nicht ohne weiteres... |
Re: Systemdienst stresst CPU
Zitat:
Zitat:
|
Re: Systemdienst stresst CPU
Zitat:
|
Re: Systemdienst stresst CPU
Hallo,
siehe ![]() Das mit dem Delay und kann Dienst nicht beenden, kann ich nicht nachvollziehen. Delay(100) sind 100 ms, so schnell kannst du gar nicht blinzeln ;) Heiko |
Re: Systemdienst stresst CPU
Zitat:
Zitat:
|
Re: Systemdienst stresst CPU
Hi,
bei mir ist die Methode so implementiert und es gibt 0% Auslastung solange auf einem TCP Port für den Dienst nichts hereinkommt (er quasi im Leerlauf ist).
Delphi-Quellcode:
Gruß,
procedure TPTSService.ServiceExecute(Sender: TService);
begin // main schleife while not Terminated do begin ServiceThread.ProcessRequests(True); end; end; Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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 by Thomas Breitkreuz