Einzelnen Beitrag anzeigen

weisswe
(Gast)

n/a Beiträge
 
#1

TTask & Synchronize Verständnisproblem

  Alt 19. Apr 2017, 10:36
Delphi-Version: 10 Berlin
Hallo!

Habe ein Verständnisproblem bei TTask.
Wollte nur Variablen der "Hauptprocedur" an den Task beim Start übergeben.
Jedoch bekomme ich nicht die richtigen Werte (meist -> 1,2,3,4,6,6).
Ich verstehe ja, das die Tasks unabhängig/zeitversetzt gestartet werden - nur wie bekomme ich Variablen "synchronisiert" beim Start des Tasks in den Task.
Hoffe habe mich irgendwie verständlich ausgedrückt.

Delphi-Quellcode:
   SetLength(tasks, anz);
   for i := 0 to anz - 1 do
   begin
      fn := Files[i].Filename;
      s := fn + ' wird heruntergeladen...';
      line := Memo1.Lines.Add(s);
      Files[i].Zeilennummer := line;
      tasks[i] := TTask.Create (
         procedure ()
         var j: Integer;
             tfn, ss: String;
         begin
            TInterlocked.Exchange(j, i); // !!?? zu spät?
            TThread.Synchronize(nil,
            procedure
            begin
               tfn := fn; // !!?? zu spät?
            end);
            ok := DownloadFile(tfn); // Herunterladen - zeitintensiv
            TThread.Synchronize(nil,
            procedure
            begin
               ss := tfn + ' wurde heruntergeladen.';
               Memo1.Lines.Add(IntToStr(j) + ' - ' + ss);
            end);
         end);
      tasks[i].Start;
   end;
  Mit Zitat antworten Zitat