AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Systemdienst stresst CPU

Offene Frage von "RolfPolf"
Ein Thema von RolfPolf · begonnen am 16. Feb 2007 · letzter Beitrag vom 16. Feb 2007
Antwort Antwort
RolfPolf

Registriert seit: 15. Mär 2006
17 Beiträge
 
Delphi 2005 Personal
 
#1

Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:26
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.: dieses).

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:
procedure TService1.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
  end;
end;
Die läuft auch, allerdings verursacht dieser Dienst dann mal permanent 50% CPU-Auslastung.
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
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:30
Delphi-Quellcode:
procedure TService1.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    Sleep(100);
    ServiceThread.ProcessRequests(False);
  end;
end;
Bau ein "Sleep()" ein.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:33
@ste_ett:

Zitat von RolfPolf:
Wenn ich ihn in der While-Schleife mit Sleep schlafen lege, dann kann er nicht mehr beendet werden.
Du könntest es mit DelayDelay versuchen.
  Mit Zitat antworten Zitat
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:43
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...
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
RolfPolf

Registriert seit: 15. Mär 2006
17 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:47
Zitat von Matze:
Du könntest es mit DelayDelay versuchen.
Danke erstmal, aber Delay verwendet Application.ProcessMessages, und das gibts nur bei GUI-Anwendungen und nicht bei Diensten...

Zitat von ste_ett:
Bau ein "Sleep()" ein.
Auch danke, aber wie bereits geschrieben: Dann lässt sich der Dienst nicht mehr beenden, bzw. nur wenn man zufällig einen nicht-Sleep-Moment erwischt.
  Mit Zitat antworten Zitat
RolfPolf

Registriert seit: 15. Mär 2006
17 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 11:56
Zitat von f.siebler:
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...
Ich arbeite mit Delphi7, sollte also nicht das Problem sein. Irgend eine Idee, wie diese Rückmeldung aussehen kann? Bei den Schweizern habe ich nur Threads ohne Lösung für die gleiche Problematik gefunden.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 12:51
Hallo,

siehe http://www.delphipraxis.net/internal...ect.php?t=7355

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
Heiko
  Mit Zitat antworten Zitat
RolfPolf

Registriert seit: 15. Mär 2006
17 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 13:02
Zitat von hoika:
Hallo,

siehe http://www.delphipraxis.net/internal...ect.php?t=7355

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
Zitat von RolfPolf:
Danke erstmal, aber Delay verwendet Application.ProcessMessages, und das gibts nur bei GUI-Anwendungen und nicht bei Diensten...
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
305 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Systemdienst stresst CPU

  Alt 16. Feb 2007, 13:13
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:
procedure TPTSService.ServiceExecute(Sender: TService);
begin
   // main schleife
   while not Terminated do
   begin
      ServiceThread.ProcessRequests(True);
   end;
end;
Gruß,
Christoph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 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