AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi mehrere Intervallaufgaben in einem Windows Dienst
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere Intervallaufgaben in einem Windows Dienst

Ein Thema von DataCool · begonnen am 15. Nov 2009 · letzter Beitrag vom 17. Nov 2009
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

mehrere Intervallaufgaben in einem Windows Dienst

  Alt 15. Nov 2009, 18:48
Hi Leute,

ich hatte neulich eine Diskusion mit einem Bekannten,
darin ging es darum wie in einem Dienst am "besten/elegantesten"
mehrere Aufgaben(seperate Threads) verwalten/starten kann.

Bei dieser Diskusion sind einige verschiedene Möglichkeiten hervorgekommen.

1. Ganz simpel Timer auf die Form ziehen, Intervall z.B. 10 Sekunden, im OnTimer Event prüfen welche Threads gestartet werden müssen.

2. Anstatt des Timers einen "Master-Thread" der alle X-Sekunden prüft, ob andere Threads gestartet werden müssen

3. threads Bei Dienststart erzeugen mit:
Delphi-Quellcode:
repreat
  // doTask;
until (Terminated) or (WaitForSingleObject(hCloseEvent, INTERVALL) = WAIT_OBJECT_0);
4. Innerhalb des OnExecute des Threads mit:
Delphi-Quellcode:
While not Terminated do begin
  ServiceThread.ProcessRequests(True);
  if (dtLastExecuteTakkXYZ + (iIntervalMinuteValue/24/60)) < dNow then begin
    // doTaskXYZ CreateThreadXYZ
  end;
end;
und es gibt noch einige Möglichkeiten mehr, mich würde mal interessieren welche Varianten/Alternativen Ihr verwendet/verwenden würdet.

In meinem speziellen Fall, gibt es 5-8 Threads verschiedene Threads die in verschiedenen Intervallen parallel laufen sollen.
Manche Threads dauern nur ein paar Sekunden(z.B. aufräumen bestimmter Verzeichnisse/FTP Uploads),
andere dauern mehrere Minuten/halbe Stunde(Import von großen Dateien).
Außerdem schliessen sich 2 Threads gegenseitig aus, d.h. es darf nur ein der beiden Threads zur selben Zeit laufen/arbeiten.

Also Jungs dann bin ich mal auf eure Vorschläge/Ideen gespannt,
danke im vorraus,

Greetz DataCool
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: mehrere Intervallaufgaben in einem Windows Dienst

  Alt 15. Nov 2009, 20:01
Zitat von DataCool:
In meinem speziellen Fall, gibt es 5-8 Threads verschiedene Threads die in verschiedenen Intervallen parallel laufen sollen.
Manche Threads dauern nur ein paar Sekunden(z.B. aufräumen bestimmter Verzeichnisse/FTP Uploads),
andere dauern mehrere Minuten/halbe Stunde(Import von großen Dateien).
Außerdem schliessen sich 2 Threads gegenseitig aus, d.h. es darf nur ein der beiden Threads zur selben Zeit laufen/arbeiten.
...
Hi,

ich würde den Hauptthread des Services als Scheduler schreiben, der bei entsprechenden Voraussetzungen einen der Threads kreiert und startet (der führt selbst Terminate und Delete aus, wenn er fertig ist).

Damit ist die Logik schön getrennt: jeder Thread tut was er tun muss, Voraussetzungen und gegenseitige Abhängigkeiten sind im Mainthread zu programmieren. Für endlos unbeaufsichtigt laufende Sevices ist meiner Meinung nach der Zyklus Create-Execute-Delete für jeden einzelnen Aufruf einer Task am stabilsten. Der Aufwand für Create und Delete ist bei den von dir beschriebenen Aufgaben vernachlässigbar.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

Re: mehrere Intervallaufgaben in einem Windows Dienst

  Alt 15. Nov 2009, 20:05
Was meinst du eigentlich mit Delete? Den Thread wieder freigeben?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: mehrere Intervallaufgaben in einem Windows Dienst

  Alt 17. Nov 2009, 07:37
@Reinhard:
Deinen Lösungsansatz, den ich auch fast genauso schon implementiert hatte, halte ich in meinem Bsp.-Fall für die beste Wahl.
Wollte mich mur nochmal bestätigt wissen bzw. bessere Alternativen hören

@divBy0:
Ich denke Reinhard meint mit dem Delete, das sich der/die Thread(s) beim OnTerminate sich selbst aus einer Liste(aller laufenden Threads) entfernen/löschen.
Auf jeden Fall läuft das bei mir so.

Greetz & Danke

Data

P.S.: Falls noch jemand bessere Ansätze/Ideen hat, immer her damit.
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: mehrere Intervallaufgaben in einem Windows Dienst

  Alt 17. Nov 2009, 14:00
Zitat von divBy0:
Was meinst du eigentlich mit Delete? Den Thread wieder freigeben?
Ja, ich meinte Destroy. Halte ich für sicherer als sich drauf zu verlassen, dass ein Workerthread monatelang überlebt.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#6

Re: mehrere Intervallaufgaben in einem Windows Dienst

  Alt 17. Nov 2009, 14:13
Ok, danke. War mir nicht ganz klar wie du das meintest.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Antwort Antwort


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:15 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