AGB  ·  Datenschutz  ·  Impressum  







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

Eigener Dienst beendet nicht korrekt...

Offene Frage von "cherry"
Ein Thema von cherry · begonnen am 15. Jan 2009 · letzter Beitrag vom 30. Apr 2009
 
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#25

Re: Eigener Dienst beendet nicht korrekt...

  Alt 30. Apr 2009, 08:09
Zitat von nahpets:
Hallo,
Kläre bitte zuerst, was Dein Dienst alles an "Fremdem" benötigt. Versuche dann in der Dienstekonfiguration diese Abhängigkeiten zu berücksichtigen, damit Dein Dienst vor den anderen, benötigten Diensten runtergefahren wird. Laufen Datenbank... auf dem gleichen Rechner als Dienste? Dann musst Du die Reihenfolge beim Starten und Beenden berücksichtigen. Ist der Dienst abhängig von anderen Programmen, die nicht als Dienst laufen, dann dürfte es schwierig werden, die Abhängigkeiten in den Griff zu bekommen.
Mein Dienst benötigt keine Fremdprogramme und keine anderen Dienste, naja, ausser dass ich per ADO auf einen SQL-Server (nicht auf meinem Computer) zugreiffe.
Braucht ADO da noch was ?

Zitat von nahpets:
Wenn Dein Dienst mal 20-30 Sekunden "irgendwas" macht und dazwischen der Rechner runter gefahren wird bzw. der Dienst gestoppt wird, bist Du vermutlich in Bezug auf Timeoutzeiten jenseits von Gut und Böse. Kannst Du die langen "Arbeitsschleifen" irgendwie ohne Datenverlust auf kleiner Happen verteilen?
Das wird sehr schwierig. Da das was etwas länger gehen könnte eine for- schleife ist die in die Datenbank schreibt...

Zitat von nahpets:
Ein Dienst hat ja diverse Ereignisse, Start, Stop, Pause, Shutdown ... . Kannst Du Dir dort irgendwie ein globales Flag setzen, auf das Deine Langläuferroutinen ggfls. reagieren, um ihre Arbeit abzubrechen?
Ich wüsste nicht wie ich das anstellen sollte. soll ich denn in meiner OnExecute Procedure immer wieder nach diesem flag fragen und allenfalls exiten?
das wäre doch kein schöner code;

Zitat von nahpets:
Was macht der Dienst, wenn er für 20-30 Sekunen "On Tour" ist. Wird das timerabhängig gesteuert. Hätten kürzere Timerintervalle auch kürzere Bearbeitungszeiten zur Folge. Dann wäre ggfls. ein "mach öfter weniger" eine Lösungsansatz.
Da das was etwas länger gehen könnte eine for- schleife ist die in die Datenbank schreibt...

Zitat von nahpets:
Damit das Betriebssystem merkt, ob Dein Dienst läuft, muss der auf jeden Fall reagieren und darf nicht "beliebig" lange vor sich hin wurschteln. Zugegeben weiß ich momentan keine Antwort auf die Frage: "Hey, du..."
Und wenn ich in meinem On execute nichts stehen hätte als folgendes:

Delphi-Quellcode:
while not terminated do
begin
  if dienststoppen then
  begin
    TerminateThread(...);
    TerminateThread(...);
    TerminateThread(...);
  end;
  ServiceThread.ProcessRequests(False);
  Sleep(500); // halbe sek. warten
end;
und dann alle aktionen in eigenen threads? ware das eine Idee?

Wie habt ihr das bei euren diensten gemacht? habt ihr da immer nur kleine Aktionen drin die nie länger dauern als 10 sek?
Ich bin am verzweifeln... heul
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  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 01:17 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