![]() |
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 |
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. |
Re: Threadanzahl begrenzen
Vielleicht ist auch ein ThreadPool mit WorkerThreads eine gute Lösung für dich ..
|
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 |
Re: Threadanzahl begrenzen
Zitat:
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. |
Re: Threadanzahl begrenzen
Hallo Zoot,
die Dateien müssen in jedem Fall abgearbeitet werden. Gruß Steppo |
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 ... |
Re: Threadanzahl begrenzen
Hallo himitsu,
die Idee hat was! Kann ein wartender Thread nicht OutTimen? Gruß Steppo |
Re: Threadanzahl begrenzen
nein, kann er nicht (es sei denn du baust einen TimeOut ein)
|
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 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz