Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
20. Apr 2017
Ich stelle gerade fest, daß wir uns ziemlich weit vom ursprünglichen Thema entfernt haben :oops:
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
20. Apr 2017
Wer sagt denn, daß die Downloads alle von demselben Server kommen? Aber selbst wenn, dann warten die anderen Download-Threads auf den freiwerdenden Socket und benötigen dabei vermutlich auch keine CPU-Zeit. Dafür skaliert das System automatisch sobald mehrere gleichzeitige Downloads möglich sind. Ich sehe immer noch keinen Vorteil darin, die Anzahl der Threads zu begrenzen.
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
20. Apr 2017
Gerade die Downloads sind ja in der Regel nicht sonderlich prozessorintensiv. Solange das Warten auf den Empfang des nächsten Datenpakets bzw. dessen Schreiben auf Platte nicht mit einem Busy-Wait implementiert ist, regelt sich das eigentlich ganz von selber.
Andererseits geht auch hier nichts über reale Messungen.
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
19. Apr 2017
:thumb: Vielleicht dann besser gleich so?
Dazu kommt noch, daß das Synchronize eh die letzte Aktion der Task ist und somit auch durch ein Queue ersetzt werden kann.
function CreateMyTask(I: Integer; fn: string; HandleResult: TProc<Integer, string, Boolean>): TProc;
begin
result :=
procedure ()
var
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
19. Apr 2017
Innerhalb der anonymen Methode wird immer der gerade aktuelle Wert der Variablen i und fn verwendet. Da dieser zur Ausführung in der Task schon ein anderer sein kann als zur Erzeugung der Task, kommt es zu diesem Verhalten. Du kannst aber die anonyme Methode auch über eine Funktion erzeugen lassen, der du den i- und fn-Parameter mitgibst. Dabei erhalten die Parameter ihre Werte aus dem...