AGB  ·  Datenschutz  ·  Impressum  







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

Threadanzahl begrenzen

Ein Thema von steppo · begonnen am 18. Sep 2009 · letzter Beitrag vom 18. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:09
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
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:15
Vielleicht ist auch ein ThreadPool mit WorkerThreads eine gute Lösung für dich ..
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:24
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
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:31
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.
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:41
Hallo Zoot,

die Dateien müssen in jedem Fall abgearbeitet werden.

Gruß
Steppo
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 14:50
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
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 15:00
Hallo himitsu,

die Idee hat was!

Kann ein wartender Thread nicht OutTimen?

Gruß
Steppo
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 15:01
nein, kann er nicht (es sei denn du baust einen TimeOut ein)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Threadanzahl begrenzen

  Alt 18. Sep 2009, 15:13
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
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:44 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