Ich muss eine TParallel.For
Schleife auf schnellstmögliche Weise beenden, wenn der Benutzer auf eine Schaltfläche Abbrechen klickt oder wenn der Benutzer das Formular schließt/zerstört. Ich habe beide versucht, mit TParallel.TLoopState.Stop
und TParallel.TLoopState.Break
:Schnellster Weg zum Beenden einer TParallel.For-Schleife?
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;
Leider die Embarcadero Dokumentation für TParallel.TLoopState.Stop
und TParallel.TLoopState.Break
Staaten nur:
Embarcadero Technologies verfügt derzeit nicht über zusätzliche Informationen.
Ich habe auch den Eindruck, dass die Schleife nicht sehr schnell unterbrochen wird. Gibt es einen besseren Weg?
„Wenn die Kontrolle über die Iteration selbst aus dem Iterator Ereignisse benötigt wird, sollte der Iterator Ereignishandler man den TParallel.TLoopState Parameter verwendet werden, wenn vorhanden, der Event-Handler wird eine Instanz von TParallel.TLoopState erhalten, aus der Statusinformationen von Faulted, Stopped oder ShouldExit überwacht werden können oder die Iterationsschleife selbst mit den Methoden Break oder Stop gesteuert werden kann. " –
Und das steht in der ['TParallel.For'-Dokumentation] (http://docwiki.embarcadero.com/Libraries/en/System.Threading.TParallel.For) –
Hier ist ein Beispiel: [Wie kann ich TTask verwenden .WaitForAny aus der neuen Threading-Bibliothek?] (Http://stackoverflow.com/a/29078846/576719) –