Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Service soll sich selber stoppen (https://www.delphipraxis.net/77923-service-soll-sich-selber-stoppen.html)

diabox 26. Sep 2006 20:16


Service soll sich selber stoppen
 
Delphi 7

Ich habe einen Service in dem mehrere Threads am Laufen sind. Unter anderem ein Telnetserver der bei einem bestimmten Befehl den Service beeden soll. Ich weiß aber leider nicht was ich für einen Befehl ausführen muss, wenn der Befehl eintritt. Wenn ich den ServiceThread terminiere, passiert nichts, nicht einmal ein "Wird beendet" im ServiceManager...

Wenn ich den Service im ServiceManager beende is er ruckzuck beendet und raus ausm Speicher. Also liegt es nicht an irgendner Schleife die den Service daran hindert beendet zu werden...

Hoffe ihr könnt mir trotz der knappen Beschreibung helfen...

jensw_2000 26. Sep 2006 20:23

Re: Service soll sich selber stoppen
 
versuch es mal mit


Delphi-Quellcode:
implementation
uses service;

...
...
Service.<DeinServiceName>.ServiceShutdown(<DeinServiceName>);

SirThornberry 26. Sep 2006 20:26

Re: Service soll sich selber stoppen
 
oder über die Api-Funktion: ControlService
Allerdings schickt diese Funktion auch nur dem Service eine Kommando. Somit ist es einfacher das Programm selbst zu terminieren.

Die einfachste Variante ist einfach "DoStop" aufzurufen. (Ist eine Methoden von TService)
Wenn du mit ControlService das Stop sendest wird letztendlich auch "DoStop" aufgerufen.

diabox 26. Sep 2006 20:34

Re: Service soll sich selber stoppen
 
Danke schonmal für die schnellen antworten :-)

Bei ServiceShutdown tut sich nichts (ruft das nicht auch nur das Event auf?).


Die Telnetkommandos werden in einer extra-Unit abgearbeitet in der ich nur die Main-Unit unter den uses habe. Wenn ich von dort telnetservice.DoStop() aufrufe erhalten ich:
Zitat:

[Fehler] uTelnetFunctions.pas(26): Undefinierter Bezeichner: 'DoStop'
Wenn ich es direkt in der Main-Unit aufrufe, bekomme ich keine Fehler. Also habe ich jetzt eine public Prozedur erstellt (in der Main-Unit), die nur DoStop() aufruft um diese Prozedur dann wiederum in meiner uTelnetFunctions.pas aufzurufen. Das Ergebnis: nichts tut sich... :-/

jensw_2000 26. Sep 2006 20:53

Re: Service soll sich selber stoppen
 
Bei ServiceShutdown tut sich nichts (ruft das nicht auch nur das Event auf?).

Hast Recht.

DoStop ist übrigens nur in TService sichtbar.

Habe es eben mal so getestet. Funktioniert bei mir.

Delphi-Quellcode:
unit service;

 
type
  TMeinSRV = class(TService)
 ...

  public

   Procedure StopIt;




implementation
 

Procedure TMeinSRV.StopIt;
begin
  DoStop;
end;



Delphi-Quellcode:
unit egal;



implementation

uses service;


....

service.MeinService.StopIt;

diabox 26. Sep 2006 21:07

Re: Service soll sich selber stoppen
 
Komisch habe den Befehl mal direkt hinter den Logeintrag gesetzt und jetzt wird angezeigt "Wird beendet"...

Eigenartig :-) aber vielen Dank.

jensw_2000 26. Sep 2006 21:21

Re: Service soll sich selber stoppen
 
Zitat:

Zitat von diabox
Komisch habe den Befehl mal direkt hinter den Logeintrag gesetzt und jetzt wird angezeigt "Wird beendet"...

Ist dein ServiceThread eventuell noch aktiv ?

diabox 27. Sep 2006 12:04

Re: Service soll sich selber stoppen
 
Hmm kann sein. Wo genau muss ich ihn denn terminieren und muss ich vorher selbst dafür sorgen, dass alle anderen Threads beendet sind?

Delphi-Quellcode:
procedure TMyService.StopMyService();
begin
MyService.ServiceThread.Terminate();
DoStop;
end;

diabox 27. Sep 2006 14:48

Re: Service soll sich selber stoppen
 
Hab jetzt n bisschen aufgeräumt und einige Threads testhalber deaktiviert. Jetzt steht beendet im Service Manager. Allerdings ist der Prozess immernoch im Speicher (also im TaskManager noch zu sehn). Erst nach ca. 20s ist er wirklcih raus... Wie kommt das? Braucht der TelnetServer so lange ums ich zu verabschieden?


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