AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Verständnisfrage zur Erstellung eines Dienstes
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zur Erstellung eines Dienstes

Ein Thema von Jumpy · begonnen am 27. Jul 2012 · letzter Beitrag vom 6. Aug 2012
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verständnisfrage zur Erstellung eines Dienstes

  Alt 27. Jul 2012, 11:49
Bei uns sieht es so aus.
Delphi-Quellcode:
  while not Terminated do
    try
      ServiceThread.ProcessRequests(False);
      Sleep(10);
    except
      on E: Exception do begin
        // Fehler loggen
      end;
    end;

Frag mich aber nicht, ob das Sleep wirklich nötig ist. Ich glaub das war mal drin, um die CPU-Last etwas zu begrenzen, falls ServiceThread.ProcessRequests genauso brutal reagiert, wie Forms.Application.ProcessMessages und die CPU voll auslastet, selbst wenn nix zu tun ist.


Bei inst sieht aber eigentlich so aus
Zitat:
while Assigned(Sender) and not Terminated do
und nach der Schleife kommt kein Code in der ServiceExecute vor.

Im ServiceCreate steht dann noch Folgendes, um den Service als normale "Anwendung" starten zu können und in Ruhe zu debuggen.
Delphi-Quellcode:
  if IsDebuggerPresent or FindCmdLineSwitch('DEBUG', ['-', '/'], True) then begin
    Forms.Application.MainFormOnTaskBar := False; // geht leider doch nicht ohne Form
    Forms.Application.CreateForm(TForm, Temp); // Form zum Beenden und für Eintrag in Taskbar
    Temp.Caption := 'Debug-Mode: ' + SvcMgr.Application.Title;
    Temp.OnCloseQuery := DebugServiceClose;
    Temp.Visible := True;
    { SvcMgr.Application.Run; }
    {}if FindCmdLineSwitch('INSTALL', ['-', '/'], True) then
    {}  TServiceApplicationHack(Application).RegisterServices(True, FindCmdLineSwitch('SILENT', ['-', '/'], True))
    {}else if FindCmdLineSwitch('UNINSTALL', ['-', '/'], True) then
    {}  TServiceApplicationHack(Application).RegisterServices(False, FindCmdLineSwitch('SILENT', ['-', '/'], True))
    {}else begin
    {}  Started := True;
    {}  ServiceStart(Self, Started);
    {}  if Started then begin
    {}    ServiceExecute(nil);
    {}    while not Terminated do
    {}      try
    {}        Forms.Application.ProcessMessages;
    {}        Sleep(10);
    {}      except
    {}        on E: Exception do begin
    {}          DM1.LogEvent('ServiceExecute: es ist ein nicht abgefangener Fehler aufgetreten', E);
    {}          Sleep(1000);
    {}        end;
    {}      end;
    {}  end;
    {}  Forms.Application.Terminate;
    {}end;
  end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Jul 2012 um 12:08 Uhr)
  Mit Zitat antworten Zitat
 


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 02:59 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