Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mehere Threads in Service-Anwendung - Elegantester Weg ?! (https://www.delphipraxis.net/131482-mehere-threads-service-anwendung-elegantester-weg.html)

DataCool 25. Mär 2009 15:05


Mehere Threads in Service-Anwendung - Elegantester Weg ?!
 
Hi Leute,

ich habe eine Service Anwendung, die mehrere Aufgaben erledigt.
Zum einen sitzt dort ein Tcp-Server(Indy) drauf und antwortet auf Anfragen.
Zum anderen habe ich 4-6 Threads die im Hintergrund einige arbeiten erledigen(nicht diesselben!).
- Einer macht z.B. Backup von Files
- Ein anderer sendet "Pings" an einen Server im Web
- Einer führt etwas längere Berechnung anhand DB-Daten durch
- Einer importiert eine bestimmte Datei(falls vorhanden) in eine DB
....

Da das ganze bei mir seit langerem immer gewachsen ist und immer nur schnell eben erweitert werden mußte,
möchte ich das ganze jetzt etwas eleganter/effizienter lösen, denn im Moment verwende ich

Einen Timer der alle 10 Sekunden prüft, welche Threads gestartet werden müssen und startet diese gegebenfalls.
Mein OnExecute des Service sieht so aus:
Delphi-Quellcode:
   While not Terminated do begin
      ServiceThread.ProcessRequests(True);
   end;
Mein Ziel ist es den Timer verschwinden zu lassen und eine Art Kontrollinstanz einzuführen,
die jederzeit weiß welche Threads laufen und in was für einem Zustand sich diese befinden.
Die Kontrollinstanz sollte Threads bei Bedarf starten/erzeugen und
ebenso sollte die Kontrollinstanz die Möglichkeit haben die Threads vorzeitig sauber zu beenden.
Eine rudimentäre Kommunikation zwischen denn Threads wäre auch nicht schlecht(über Events ?!)

Mein erster war mit einem Master-Thread zu arbeiten, der nichts tut außer die Threads in einer Liste zu verwalten und zu überwachen.
Hinzu kommt eine "Child-Work-Thread" Klasse, von der alle Threads abgeleitet werden, die nachher vom Master verwaltet werden sollen.
In dieser Klasse wird das zusammenspiel zwischen Master und Child Threads implementiert.
Die späteren Thread-lassen erben das von "Child-Work-Thread" und definieren die Methode die DoWork in "Child-Work-Thread" virtual definiert ist.

^^ Soweit ^^ mein Gedankenansatz, was haltet Ihr davon ? Was kann man besser machen ? Was ist unsinnig ?
Bin auch für ganz andere Lösungsansätze offen ;-)

Interessant ist vielleicht noch das mein Dienst 3 verschiedene Datenbank Verbindungen hat,
könnte es bei den ganzen Child Threads zu Problemen führen ?
Die Verbindungen werden im OnStart/OnContinue des Dienstes hergestellt.

Bin gespannt auf eure Antworten,

Greetz Data


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