![]() |
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... |
Re: Service soll sich selber stoppen
versuch es mal mit
Delphi-Quellcode:
implementation
uses service; ... ... Service.<DeinServiceName>.ServiceShutdown(<DeinServiceName>); |
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. |
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:
|
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; |
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. |
Re: Service soll sich selber stoppen
Zitat:
|
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; |
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