AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Mehere Threads in Service-Anwendung - Elegantester Weg ?!
Thema durchsuchen
Ansicht
Themen-Optionen

Mehere Threads in Service-Anwendung - Elegantester Weg ?!

Ein Thema von DataCool · begonnen am 25. Mär 2009
Antwort Antwort
Benutzerbild von DataCool
DataCool

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

Mehere Threads in Service-Anwendung - Elegantester Weg ?!

  Alt 25. Mär 2009, 16:05
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 07:07 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