AGB  ·  Datenschutz  ·  Impressum  







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

Workerthreadpool Frage

Ein Thema von IMPEGA · begonnen am 16. Feb 2015 · letzter Beitrag vom 16. Feb 2015
Antwort Antwort
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
83 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Workerthreadpool Frage

  Alt 16. Feb 2015, 18:31
Hi Leute
Ich habe mir die Unit csWorkerThreadPool.pas angeschaut.
http://www.delphipraxis.net/93835-wo...ntergrund.html
Sehr angenehme Sache. So weit läuft Alles super. Ich hätte aber noch eine Kleine Frage zu dem Thema.

Wie frage oder fange ich es ab wenn Alle Threads (Job's) fertig sind?
Ich habe es über Umwege abgefangen. Sprich meine Liste gezählt und wenn die Endzahl erreicht ist eben als fertig gemeldet.
Das ist aber nicht gerade eine schöne Methode.
Kann man die Threads die man abgefeuert hat überwachen?
Ich möchte eben zB. 30 Jobs erledigen. Das ganze mit 5 Threads.
Sobald mein letzte Thread fertig ist möchte ich eine Meldung erhalten. Ist es möglich? Falls ja, bitte um Aufklärung.

Für ein paar Tipps bin ich sehr dankbar.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Workerthreadpool Frage

  Alt 16. Feb 2015, 19:43
Erweitere doch die Klasse um einen Event, der gefeuert wird wenn die Jobwarteschlange leer ist und alle Workerthreads auf Jobs warten. Dann ist der Pool ja im Idle Modus und so würde ich den Event auch nennen OnIdle .

Ansonsten lass doch jeden Job zum Schluss per TThread.Synchronize eine Nachricht schicken, wo er seine Fertigstellung meldet.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
83 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Workerthreadpool Frage

  Alt 16. Feb 2015, 21:46
Dein Vorschlag mit dem Event kriege ich noch nicht hin.
Ich habe zwar schon einige Male mit Threads gearbeitet, bin aber wie zuvor immer noch nur ein Hobbyprogrammierer.
Deinen zweiten Vorschlag werde ich aber wohl umsetzen.
Ansonsten lass doch jeden Job zum Schluss per TThread.Synchronize eine Nachricht schicken, wo er seine Fertigstellung meldet.
Das sollte wohl für mich realisierbar sein.
Bevor ich mich damit noch tiefer beschäftige will ich erst schauen ob es die Hilfe für mich ist die ich benötige.
Ich habe mir schon eine eigene Methode geschrieben gehabt, leider stürzt meine exe immer wieder ab.
Danke für den Ansatz. Damit kann ich was anfangen.

Voreilige Zusatzfrage.
Zitat:
TThread.Synchronize eine Nachricht schicken, wo er seine Fertigstellung meldet.
Ich denke mal ich muss auch überwachen ob der Thread nicht gleich erneut gestartet wurde. Zumindest so lange bis Alle meine Jobs erledigt sind.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Workerthreadpool Frage

  Alt 16. Feb 2015, 22:26
"A
Wie frage oder fange ich es ab wenn Alle Threads (Job's) fertig sind?
Ich habe es über Umwege abgefangen. Sprich meine Liste gezählt und wenn die Endzahl erreicht ist eben als fertig gemeldet.
Das ist aber nicht gerade eine schöne Methode.
Doch, eigentlich schon.

Aus Sicht des Threadpools gilt: Nach dem Job ist vor dem Job, oder einfacher ausgedrückt: Es gibt für ihn kein 'alles erledigt'. Wenn Du 30 Jobs zu erledigen hast, aber erst 10 in die Queue packst und später nochmal 10, dann ist der Pool zwischendurch mal 'fertig' bzw. ist die Queue leer, aber das heißt eben nicht, das nicht vielleicht doch noch etwas kommt.

Dein Ansatz ist also vollkommen richtig, denn nur der Aufrufer weiß, wann alle Jobs abgearbeitet sind.

Du kannst z.B. eine Variable XYZ auf 30 setzen und jeder Job dekrementiert diese Variable in seinem Destruktor mit 'InterlockedDecrement' (=Threadsicher). Wenn die bei 0 ist, bist Du fertig.

Geändert von Dejan Vu (17. Feb 2015 um 07:45 Uhr)
  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 03:06 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