Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   NT-Service starten und dann 50% CPU Auslastung (https://www.delphipraxis.net/95962-nt-service-starten-und-dann-50-cpu-auslastung.html)

ueding 16. Jul 2007 17:19


NT-Service starten und dann 50% CPU Auslastung
 
Hallo
ich habe mit diesem TUT einen Dienst erstellt
wenn ich jetzt diesen Dienst starte, habe ich 50% CPU Auslastung (dualCore CPU).
Ich habe nachstehenden Code geändert.

Delphi-Quellcode:
procedure TService1.Timer2Timer(Sender: TObject);
begin
 showMessage('timer 2');
end;
Zeitinterwal 10 Sekunden

Delphi-Quellcode:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
  showMessage('OnStart');
  Started := True;
  timer2.Enabled := true;
   showMessage('Timer eingeschaltet')
end;
Was muss ich machen damit die CPU Auslastung zurück geht ?

Danke schon mal für Eure HILFE


Gregor

jbg 16. Jul 2007 17:21

Re: NT-Service starten und dann 50% CPU Auslastung
 
Du musst ein wenig Rechenzeit freigeben.
Delphi-Quellcode:
procedure TServiceExecutionRestriction.ServiceExecute(Sender: TService);
begin
  while not Sender.Terminated do
  begin
    Sender.ServiceThread.ProcessRequests(True); // Rechenzeit freigeben
  end;
end;

ueding 16. Jul 2007 17:32

Re: NT-Service starten und dann 50% CPU Auslastung
 
Danke für die schnelle Hilfe :hello:

geht

Gregor

Luckie 16. Jul 2007 17:45

Re: NT-Service starten und dann 50% CPU Auslastung
 
Ähm, was soll das ShowMessage in dem Dienst? Ein Dienst läuft in einer anderen WindowsStation auf einem anderen Desktop, den der Benutzer nie zu sehen bekommt, es sei denn es handelt sich um einen interaktiven Dienst. Diese stellen aber eine Sicherheitslück dar und Microsoft rät davon ab solche Dienste zu nutzen. Hinzukommt, dass Windows Vista aus eben diesen Gründen keine interaktiven Dienste mehr unterstützt.

SirThornberry 16. Jul 2007 18:14

Re: NT-Service starten und dann 50% CPU Auslastung
 
ich stimme luckie zu. Jedoch unterstützt Messagebox das anzeigen einer Message über alle Desktops hinweg. Ich glaub in der Hinsicht ist Vista weiterhin inkonsequent.

ueding 17. Jul 2007 07:39

Re: NT-Service starten und dann 50% CPU Auslastung
 
Hallo Luckie


Zitat:

Zitat von Luckie
Ähm, was soll das ShowMessage in dem Dienst? Ein Dienst läuft in einer anderen WindowsStation auf einem anderen Desktop, den der Benutzer nie zu sehen bekommt, es sei denn es handelt sich um einen interaktiven Dienst. Diese stellen aber eine Sicherheitslück dar und Microsoft rät davon ab solche Dienste zu nutzen. Hinzukommt, dass Windows Vista aus eben diesen Gründen keine interaktiven Dienste mehr unterstützt.

Der Dienst hat später keine ShowMessage mehr.

Den Dienst kann mit Projekt1.exe INSTALL Installieren,
mit Projekt1.exe UNINSTALL Deinstallieren.

Wie kann ich den Dienst denn starten ?

Projekt1.exe START geht nicht.

Danke

Gregor

sakura 17. Jul 2007 08:08

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von SirThornberry
ich stimme luckie zu. Jedoch unterstützt Messagebox das anzeigen einer Message über alle Desktops hinweg. Ich glaub in der Hinsicht ist Vista weiterhin inkonsequent.

Nein, aber MS hat eine spezielle API für Messageboxes für genau diesen Fall zur Verfügung gestellt, iirc.

...:cat:...

DP-Maintenance 17. Jul 2007 09:35

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.

tekkyeah 9. Mär 2009 11:21

Re: NT-Service starten und dann 50% CPU Auslastung
 
Hallo zusammen, interessanter Thread,
ich habe einen Dienst der wunderbar läuft, aber das gleiche Problem mit der Auslastung der CPU.
Dann habe ich das hier gefunden

Zitat:

Delphi-Quellcode:
procedure TServiceExecutionRestriction.ServiceExecute(Sender: TService);
begin
  while not Sender.Terminated do
  begin
    Sender.ServiceThread.ProcessRequests(True); // Rechenzeit freigeben
  end;
end;

Nur, wie kann ich das einbinden ?
Die Prozedur wird von Delphi (BDS 2006) immer abgelehnt...
Kann mir jemand weiterhelfen ?

Gruß
Holger

Luckie 9. Mär 2009 11:30

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von tekkyeah
Die Prozedur wird von Delphi (BDS 2006) immer abgelehnt...

Endlich mal was neues. Sonst heißt es immer "Es kommt ein Fehler." :mrgreen:

Überleg mal bitte, was wir jetzt wissen müssten, um dir helfen zu können.

jaenicke 9. Mär 2009 11:31

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von tekkyeah
Nur, wie kann ich das einbinden ?
Die Prozedur wird von Delphi (BDS 2006) immer abgelehnt...
Kann mir jemand weiterhelfen ?

Wenn ich eine neue Serviceanwendung erstelle, und das in OnExecute schreibe, dann lässt sich das normal kompilieren. (Wie ich nicht anders erwartet hatte.)

tekkyeah 9. Mär 2009 11:41

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Wenn ich eine neue Serviceanwendung erstelle, und das in OnExecute schreibe, dann lässt sich das normal kompilieren. (Wie ich nicht anders erwartet hatte.)
Mir geht es darum, dass ich die Prozedur "TServiceExecutionRestriction..."nicht einbinden kann....
Vielleicht stelle ich mich ja zu blöd an...

procedure TServiceExecutionRestriction.ServiceExecute(Sender : TService);

Wie binde ich das ein ?

Gruß
Holger

jaenicke 9. Mär 2009 11:47

Re: NT-Service starten und dann 50% CPU Auslastung
 
:roll: Das ist doch nur der Name der Klasse in dem Beispiel.
Meinst du nicht du solltest dich erst einmal mit den Grundlagen beschäftigen bevor du dich an so etwas wie einen Dienst machst?

Erstell eine neue Dienstanwendung, dann geh im Objektinspektor unter Ereignisse auf OnExecute und klicke dort doppelt. Und dann ergänzt du den Code wie im Beispiel.

tekkyeah 9. Mär 2009 11:53

Re: NT-Service starten und dann 50% CPU Auslastung
 
Gosh... Geile Antwort...

Ich habe mich schon damit befasst, sonst wäre meine Frage ja: Wie mache ich einen Dienst...

und ich dachte es gäbe wirklich etwas oder jemanden, was/der mir da weiterhilft...
Natürlich habe ich das längst in meiner Prozedur "ServiceExecute" drin...
Nur ist die Auslastung trotzdem noch zu hoch...
Habe einen Timer laufen, der jede Minute was tut... das dabei dann die CPU ausgelastet ist, kann ich verstehen...
Aber dazwischen sollte doch die CPU-Last doch gegen 0 gehen...

Luckie 9. Mär 2009 11:59

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von tekkyeah
und ich dachte es gäbe wirklich etwas oder jemanden, was/der mir da weiterhilft...

Es würde eventuell mal helfen, wenn du uns endlich mal die Fehlermeldung der IDE mitteilen würdest.

jaenicke 9. Mär 2009 12:03

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von tekkyeah
Natürlich habe ich das längst in meiner Prozedur "ServiceExecute" drin...

Danach hörte sich deine Antwort aber nicht an.
Zitat:

Zitat von tekkyeah
Mir geht es darum, dass ich die Prozedur "TServiceExecutionRestriction..."nicht einbinden kann....
Vielleicht stelle ich mich ja zu blöd an...

procedure TServiceExecutionRestriction.ServiceExecute(Sender : TService);

Wie binde ich das ein ?

Das hörte sich für mich so an als wüsstest du gar nicht wo das hingehört. :?

Ja, wenn du es drin hast und nichts ändert, was passiert denn da noch in deinem OnExecute?

Klaus01 9. Mär 2009 12:04

Re: NT-Service starten und dann 50% CPU Auslastung
 
-- war Unsinn - gelöscht --

Grüße
Klaus

quendolineDD 9. Mär 2009 12:13

Re: NT-Service starten und dann 50% CPU Auslastung
 
Mal ProcessRequests(False) probiert?

tekkyeah 9. Mär 2009 12:38

Re: NT-Service starten und dann 50% CPU Auslastung
 
Es gibt keine Fehlermeldung...

Die einzig noch verbleibende Frage ist, warum die CPU-Last nicht runtergeht...

Delphi-Quellcode:
procedure TMeinService.ServiceExecute(Sender: TService);
begin
  while not Sender.Terminated do
  begin
    ServiceThread.ProcessRequests(False);
  end;
end;

Luckie 9. Mär 2009 12:43

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Zitat von tekkyeah
Es gibt keine Fehlermeldung...

Also ben schreibst du noch, dass Delphi den Code "ablehnt", was auch immer das heißt.

jaenicke 9. Mär 2009 12:44

Re: NT-Service starten und dann 50% CPU Auslastung
 
Also wenn da wie du ja gepostet hast sonst nichts passiert, bleibt ja eigentlich nur der Timer.

Was passiert, wenn du den deaktivierst? Ist die Auslastung dann runter?

tekkyeah 9. Mär 2009 12:45

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Also oben schreibst du noch, dass Delphi den Code "ablehnt", was auch immer das heißt.
Ja, stimmt... da hatte ich noch begriffen, dass das nur eine Beispielprozedur ist... :-) Sorry dafür...

tekkyeah 9. Mär 2009 13:18

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Also wenn da wie du ja gepostet hast sonst nichts passiert, bleibt ja eigentlich nur der Timer.
Was passiert, wenn du den deaktivierst? Ist die Auslastung dann runter?
Leider ist die Auslastung immer noch bei 100 %...
Selbst wenn ich (wie unten angegeben) den Timer nicht "enable"

Delphi-Quellcode:
procedure TmesoCRM_Service.ServiceStart(Sender: TService;
  var Started: Boolean);
var
  Ini: TIniFile;
begin
  Timer1.Enabled := False;
  Ini := TIniFile.Create('meine.ini');
  TimerInterval := Ini.ReadInteger('Connection', 'TimerInterval', 0);
  Ini.WriteDateTime('Exim', 'ServiceStarted', Now);
  Ini.Free;
  Timer1.Interval := TimerInterval*60000;
//  Timer1.Enabled := True;
  Started := True;
end;

jaenicke 9. Mär 2009 13:26

Re: NT-Service starten und dann 50% CPU Auslastung
 
Ist der Timer im Objektinspektor aktiviert? Wenn der beim Start zunächst aus sein soll, dann sollte der da ausgeschaltet werden und nach den Startoperationen nur angeschaltet.

Trotzdem sollte der durch den Code ja deaktiviert werden. Wenn da kein Code ausgeführt wird, dann fällt mir aber auch nichts ein was die Auslastung erklären könnte. :gruebel:

tekkyeah 9. Mär 2009 15:04

Re: NT-Service starten und dann 50% CPU Auslastung
 
Zitat:

Ist der Timer im Objektinspektor aktiviert?
Nein, der Timer ist nicht aktiviert...
Und der einzige ausführbare code sonst steht im timer-Event...
Ansonsten ist das ein nackter Dienst...


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