Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threadanzahl begrenzen (https://www.delphipraxis.net/140456-threadanzahl-begrenzen.html)

steppo 18. Sep 2009 14:09


Threadanzahl begrenzen
 
Hallo zusammen,

in einen Ordner werden laufend Dateien geschrieben. Die Weiterverarbeitung der Dateien habe ich mit Hilfe von Threads realisiert.
Nun ist es so, dass teilweise bis zu 300 threads gestartet werden.

Ich möchte die Threadanzahl auf 16 Threads begrenzen.

Wenn ich das ganze nun richtig verstanden habe, kann ich die Threads auf Suspended= True setzen. Nun besteht aber die Gefahr, dass der Thread OutTimed.

Welche Möglichkeiten habe ich, dieses zu verhindern?

gruß
Steppo

Zoot 18. Sep 2009 14:15

Re: Threadanzahl begrenzen
 
Ich habe bei einem ähnlichen Problem schlicht einen globalen Zähler verwendet.
AB X threads wird kein neuer erstellt, jeder Thread zählt beim erstellen hoch und beim schließen runter.
Kann man auch in einer Schleife warten lassen, bis Numthreads wieder < x ist.

Zacherl 18. Sep 2009 14:15

Re: Threadanzahl begrenzen
 
Vielleicht ist auch ein ThreadPool mit WorkerThreads eine gute Lösung für dich ..

steppo 18. Sep 2009 14:24

Re: Threadanzahl begrenzen
 
Hallo Zoot, Hallo Zacherl,

danke für die raschen Antworten. Im moment zähle ich die Threads auch über einen globalen Zähler.

Zoot,

du meinst also, ich soll den Thread erst starten, wenn die Anzahl laufender Threads unter der von mir gestzten Grenze liegt. Das heißt, ich müßte z.B. die Dateinamen in ein Array schreiben und bei Möglichkeit nacharbeiten. Habe ich das richtig verstanden?

Zacherl,

Threadpool sagt mir jetzt nichts. Gibt es dort die Möglichkeit das ganze vom System verwalten zu lassen?

gruß Steppo

Zoot 18. Sep 2009 14:31

Re: Threadanzahl begrenzen
 
Zitat:

Zitat von steppo
Hallo Zoot, Hallo Zacherl,

danke für die raschen Antworten. Im moment zähle ich die Threads auch über einen globalen Zähler.

Zoot,

du meinst also, ich soll den Thread erst starten, wenn die Anzahl laufender Threads unter der von mir gestzten Grenze liegt. Das heißt, ich müßte z.B. die Dateinamen in ein Array schreiben und bei Möglichkeit nacharbeiten. Habe ich das richtig verstanden?

Zacherl,

Threadpool sagt mir jetzt nichts. Gibt es dort die Möglichkeit das ganze vom System verwalten zu lassen?

gruß Steppo


Die Frage ist, was du machen willst, wenn es "zu viele" Threads sind. In meinem Fall war es einfach, der Thread startet nie und wird weggeworfen.

Wenn du dir den Task merken musst, würde sich eine Joblist oder etwas ähnliches anbieten. Eine Liste von Objekten, die du nacheinander abarbeitest und nach Ausführung löschst. Da müsste es doch schon einiges zu geben.

steppo 18. Sep 2009 14:41

Re: Threadanzahl begrenzen
 
Hallo Zoot,

die Dateien müssen in jedem Fall abgearbeitet werden.

Gruß
Steppo

himitsu 18. Sep 2009 14:50

Re: Threadanzahl begrenzen
 
dann merk dir die Dateien und erstelle erst einen neuen Thread, wenn er noch "Platz" hat.

Oder ganz einfach
- erstelle eine Dateiliste
- erstelle deine 16 Threads
- fülle nun diese Liste
- und wenn ein thread grad nichts zu tun hat, schaut er in diese Liste,
holt sich eine Datei dort raus und arbeitet sie ab
- wenn ein thread nun fertig ist, dann holt er sich die nächste Datei oder geht in einen Wartemodus, bis wieder Dateien in der Liste sind
...

steppo 18. Sep 2009 15:00

Re: Threadanzahl begrenzen
 
Hallo himitsu,

die Idee hat was!

Kann ein wartender Thread nicht OutTimen?

Gruß
Steppo

himitsu 18. Sep 2009 15:01

Re: Threadanzahl begrenzen
 
nein, kann er nicht (es sei denn du baust einen TimeOut ein)

steppo 18. Sep 2009 15:13

Re: Threadanzahl begrenzen
 
O.k hört sich gut an. Allerdings bleibt die Frage wie ich die Liste aktuell halte, da ja immer wieder Dateien eingetragen und auf der anderen Seite Dateien abgearbeitet werden?

Eine Idee?
Wo finde ich Informationen zu ThreadPool?

Gruß
Steppo


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Seite 1 von 2  1 2      

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