![]() |
Code für zwei For-Schleifen bereitstellen? Dumme Frage!
Entweder stelle ich mich gerade sehr dumm an oder es funktioniert tatsächlich nicht.
Folgendes Konstrukt
Delphi-Quellcode:
Nun möchte ich aber von der Compiler-Direktive weg und einen anderen Weg finden, beide Schleifen zur Verfügung zu stellen.
{$IFDEF TPARALLEL_FOR}
TParallel.For(0, 99, procedure(i_: Integer; aLoopState: TParallel.TLoopState) // var "irgendwelche Variablen die in TParallel.For benötigt werden" {$ELSE} for i_ := 0 to 99 do {$ENDIF} begin if bCancelled then begin {$IFDEF TPARALLEL_FOR} aLoopState.Stop; Exit; {$ELSE} Break; {$ENDIF} end; // Do something ... (für beide Schleifen gleich) {$IFDEF TPARALLEL_FOR} end); {$ELSE} end; {$ENDIF} // for Statt einer Compiler-Direktive denke ich da an ein einfaches If-Else-Konstrukt. Wie würdet ihr das machen, um doppelten Code zu vermeiden? |
AW: Code für zwei Vorschleifen bereitstellen? Dumme Frage!
Hallo,
es ist auf jeden Fall sinnvoll von den Compiler-Direktiven wegzukommen. Spricht etwas gegen 3 Methoden? 1. Methode: Parallele Schleife 2. Methode: Sequentielle Schleife 3. Methode: Do something (gemeinsamer Code) Es ist somit oft eine gute Idee, gemeinsamen Code in eine extra Methode auszulagern. Grüße Headbucket |
AW: Code für zwei Vorschleifen bereitstellen? Dumme Frage!
Zitat:
Ja genau. Diese Direktive muss weg. Sie war nur zum Testen gedacht, um schnell an X-Stellen von For auf TParallel.For umzusteigen. Also im Prinzip meinst du ... ?
Delphi-Quellcode:
procedure HauptProzedur;
var X_Variablen ... : Integer; // Variablen die in SequentielleSchleife genutzt werden (z.B. i_: Integer); procedure GemeinsamerCode(i: Integer); begin // Schleife abarbeiten // Mache etwas mit i_ end; procedure ParalleleSchleife; begin TParallel.For(0, 99, procedure(i_: Integer; aLoopState: TParallel.TLoopState) // var "irgendwelche Variablen die in TParallel.For benötigt werden" begin // Spezifischer Code (aLoopState.Stop etc) GemeinsamerCode(i_); end); end; procedure SequentielleSchleife; begin for i_ := 0 to 99 do begin // Spezifischer Code (Break etc) GemeinsamerCode(i_); end; end; begin if NutzeTParallelFor ParalleleSchleife else SequentielleSchleife; end; // Ende Hauptprozedur |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz