Мне нужно максимально быстро выйти из цикла TParallel.For
, когда пользователь нажимает кнопку «Отмена» или когда пользователь закрывает/уничтожает форму. Я пробовал как с TParallel.TLoopState.Stop
, так и с TParallel.TLoopState.Break
:
var
BreakCondition: Boolean;
procedure TForm2.DoStartLoop;
begin
BreakCondition := False;
System.Threading.TParallel.For(1, 50,
procedure(idx: Integer; LS: TParallel.TLoopState)
begin
if BreakCondition then
begin
//LS.&BREAK;
LS.STOP;
//EXIT;
end
else
DoProcessValue(idx);
end);
end;
К сожалению, в документации Embarcadero для TParallel.TLoopState.Stop
и TParallel.TLoopState.Break
указано только:
Embarcadero Technologies в настоящее время не располагает дополнительной информацией.
У меня также сложилось впечатление, что петля не прерывается очень быстро. Есть ли способ лучше?
TParallel.For
документации. - person Remy Lebeau   schedule 04.05.2017DoProcessValue()
должен регулярно проверять свойствоStopped
. - person LU RD   schedule 04.05.2017TEvent
, когда пользователь отменяет свой набор на signaled, цикл проверяет это и выходит. Есть только так много в настоящее время нет никакой дополнительной информации .. стоит следить. - person FredS   schedule 05.05.2017