Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TWorkerthread fertig? (https://www.delphipraxis.net/121738-tworkerthread-fertig.html)

klebe7 3. Okt 2008 14:58


TWorkerthread fertig?
 
Hallo,

Kurz und knapp: Wie kann ich bei der TWorkerthread Kompo. von alzaimar am besten feststellen, ob es fertig ist? also keine Jobs mehr zum Abarbeiten vorhanden sind.

alzaimar 3. Okt 2008 15:51

Re: TWorkerthread fertig?
 
Wenn die Jobliste leer ist, denke ich. Müsste mal nachschauen. Hast Du die Threadpool-Klasse?

klebe7 3. Okt 2008 15:58

Re: TWorkerthread fertig?
 
Zitat:

Zitat von alzaimar
Wenn die Jobliste leer ist, denke ich. Müsste mal nachschauen. Hast Du die Threadpool-Klasse?

Hallo,

Ich hab den ersten Anhang aus diesem Thread geladen.
Mein Programm arbeiten ungefähr so, wie in der Demo.
Wie kann ich denn auslesen, wie viele Jobs noch abzuarbeiten sind?
Ich habe mal versucht PendingJobCount in einem Timer auf 0 zu überprüfen, aber diese Eigenschaft gibt zu früh 0 zurück, sodass es so nicht geht.
Zudem würde ich es auch gerne ohne Timer machen.

Gibt es da noch eine saubere Lösung? In der Demo wird man ja auch nicht benachrichtigt, wenn alles fertig ist.

Danke und mfg

alzaimar 3. Okt 2008 17:40

Re: TWorkerthread fertig?
 
Der ThreadPool weiss selbst nicht, wann auch der letzte Job seine Arbeit beendet hat, das stimmt. Grundsätzlich ist das ja nicht die Aufgabe des Threadpools, denn dieser verteilt die Arbeit nur. Natürlich wäre es interessant, aber imho ist das die Aufgabe der Jobs: Verwalte einen threadsicheren Zähler, der beim .Create deiner Jobs hoch- und beim .Destroy wieder heruntergezählt wird. DAS wäre dann der Zähler, wie viele Jobs noch arbeiten.

Threadsicher wird eine Variable immer dann, wenn sichergestellt ist, das immer nur ein Thread Schreibzugriff auf die Variable hat. Dazu kannst Du eine CriticalSection nehmen, oder Du schaust Dir die Funktion 'InterlockedIncrement' und 'InterlockedDecrement' an :zwinker:

klebe7 3. Okt 2008 18:10

Re: TWorkerthread fertig?
 
Zitat:

Zitat von alzaimar
Der ThreadPool weiss selbst nicht, wann auch der letzte Job seine Arbeit beendet hat, das stimmt. Grundsätzlich ist das ja nicht die Aufgabe des Threadpools, denn dieser verteilt die Arbeit nur. Natürlich wäre es interessant, aber imho ist das die Aufgabe der Jobs: Verwalte einen threadsicheren Zähler, der beim .Create deiner Jobs hoch- und beim .Destroy wieder heruntergezählt wird. DAS wäre dann der Zähler, wie viele Jobs noch arbeiten.

Threadsicher wird eine Variable immer dann, wenn sichergestellt ist, das immer nur ein Thread Schreibzugriff auf die Variable hat. Dazu kannst Du eine CriticalSection nehmen, oder Du schaust Dir die Funktion 'InterlockedIncrement' und 'InterlockedDecrement' an :zwinker:

Jo, Danke so hatte ich's mir auch gedacht. :thumb:

~erledigt~


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