Перейти к содержанию
Fire Monkey от А до Я
  • 0

Передать значение в ITask


rareMax

Вопрос

Как можно передать какое-либо значение в ITask?

Допустим есть код:

procedure TfrmScaner.Switch1Switch(Sender: TObject);
var
  Cursor: uMisc.ICursorChange;
  Tasks: TArray<ITask>;
  I: Integer;
begin
  Cursor := TCursorChange.Create(crAppStart);
  FillGrid;
  SetLength(Tasks, GridDataManager1.RowCount);
  // Смотри с этой строки
  for I := Low(Tasks) to High(Tasks) do
  Begin
    Tasks[I] := TTask.Create(
      Procedure
      Begin
        ParseItem(MyParametr);
      End);
    Tasks[I].Start;
  end;
end;
Мне нужно передать процедуре ParseItem значение MyParametr = I. Как бы это сделать? Изменено пользователем Сысоев Максим
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Так и делайте.

 ParseItem(i).

Емнип, значение будет размещено в стеке, так что последующие изменения переменной на уже созданный таск не повлияют.

Ссылка на комментарий
  • 0

О мне ответили)

Скорее всего я что то не так понял - но Таск получает только последнюю итерацию цикла(почему?)

(В принципе я свою задачу решил - воспользовался TParallel.For, но для себя все же интересно - можно ли передавать параметры, если да - то как)

и так - пример для запуска:

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  FMX.Types,
  System.SysUtils,
  System.Threading;

Const
  TEST_COUNT = 5;

var
  Tasks: TArray<iTask>;
  I: Integer;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    SetLength(Tasks, TEST_COUNT);
    // Смотри с этой строки
    for I := Low(Tasks) to High(Tasks) do
      Tasks[I] := TTask.Create(
        Procedure
        Begin
          Log.d(I.ToString);
        End);
      Tasks[I].Start;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Цитата

Debug Output: 5 Process Project1.exe (5760)
Debug Output: 5 Process Project1.exe (5760)
Debug Output: 5 Process Project1.exe (5760)
Debug Output: 5 Process Project1.exe (5760)
Debug Output: 5 Process Project1.exe (5760)

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...