Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

Re: Asynchron Jobs abarbeiten - Best Practice?

  Alt 14. Mai 2010, 10:39
Ich hab das bei meinen Programmen inzwischen oftmals so gelöst.
( über diese Klasse > http://www.delphipraxis.net/internal...096957#1096957 )

> der Hauptthread füllt eine Liste, mit den zu bearbeitenden Aufgaben
> alle Threads fragen nun in dieser Liste ab, ob es was gibt,
also der Thread, welcher grade nix zu tun hat, der nimmt sich die älteste Aufgabe raus und bearbeitet siese

Wenn man für jeden Thread eine eigene Liste verwaltet, dann müsste der Hauptthread schon genau wissen, wie lange die Aufgaben dauern und verteilt so die Aufgaben ... hier kann es aber auch mal vorkommen, daß einige Threads nichts zu tun haben, wärend andere Threads sich zu Tode rackern, weik die Aufgaben nicht "gut" verteilt wurden.

Die Liste hatte ich direkt schon mit einer Threadabsicherung ausgestatet, damit dieses beim Zugriff nicht noch zusätzlich in den Threads behandelt werden muß (wo man es schnell mal vergessen könnte).

PS: Willlst du jetzt noch eine Rückmeldung, für die erledigten Aufgaben, dann könnte man (wie du es wohl vor hast) die erledigten Aufgaben von den Threads in eine weitere Liste eintragen lassen, welche dann vom Haupthtread ausgelesen wird (praktisch alles nur andersrum) oder du schickst deinem Hauptprogramm einfach via PostMessage, SendMessage oder auch über einen synchronisierten Prozeduraufruf eine Meldung "Diese Aufgabe ist jetzt fertig" (wobei die Varianten, mit der 2. Liste, bzw. über PostMessage, aus Sicht der Arbeitssthreads vermutlich das Schnellere wären).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat