Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aufgaben auf Threads aufteilen? (https://www.delphipraxis.net/13911-aufgaben-auf-threads-aufteilen.html)

josef 29. Dez 2003 02:23


Aufgaben auf Threads aufteilen?
 
Ich habe folgendes Problem:
Ich hab mir zum Testen ein kleines Multithread-Programm geschrieben. :coder:
Man soll angeben können, wieviele Aufgaben zu erledigen sind, und wieviele Threads gestartet werden sollen.
Funktioniert auch fast.
Ich habe ein Problem mit der Aufteilung.
Mir fällt nicht ein wie ich das lösen soll, dass z.B. 9 Aufgaben auf fünf Thrads verteilt werden sollen.
Dividieren kann ich nicht, da sonst immer eine Ganze zahl rauskommt, und 9 kein vielfaches von 5 ist.
Es müssten also vier Threads jeweils 2 Aufgaben ausführen, und ein Thread nur eine.

Hoffentlich kapiert jetzt noch einer was ich meine :roteyes:

Duffy 29. Dez 2003 06:06

Re: Aufgaben auf Threads aufteilen?
 
Hallo josef,
Zitat:

Zitat von josef
Dividieren kann ich nicht, da sonst immer eine Ganze zahl rauskommt, und 9 kein vielfaches von 5 ist.

mach es doch so
Delphi-Quellcode:
var
  AnzAufgabenJeThread: Integer;
begin
  AnzAufgabenJeThread := AnzAufgaben div AnzThreads;
  if (AnzAufgaben mod AnzThreads) > 0 then
    Inc(AnzAufgabenJeThread);
end;
jetzt einfach auf jeden Thread mit AnzAufgabenJeThread die Aufgaben verteilen bis AnzAufgaben = 0 ist.

bye
Claus

choose 29. Dez 2003 14:30

Re: Aufgaben auf Threads aufteilen?
 
Wie genau sind Deine Aufgaben organisiert (command pattern)? Wenn Du ohnehin einen Pool von Aufgaben hast (Stapelspeicher, Stack), könnte ein Thread sich an diesen Pool verwenden (Singelton), um die nächste Aufgabe entgegen zunehmen und gleichzeig vom Stapel entfernen (Pop)...
Vielleicht hilft dir Bei Google suchenthread producer consumer weiter?

josef 29. Dez 2003 17:24

Re: Aufgaben auf Threads aufteilen?
 
Vielen Dank!
Ihr habt mir beide sehr geholfen :thuimb:
Mal schauen wie ich es Mach :)


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