Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Code für zwei For-Schleifen bereitstellen? Dumme Frage! (https://www.delphipraxis.net/191274-code-fuer-zwei-schleifen-bereitstellen-dumme-frage.html)

a.def 28. Dez 2016 11:31

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:
{$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
Nun möchte ich aber von der Compiler-Direktive weg und einen anderen Weg finden, beide Schleifen zur Verfügung zu stellen.
Statt einer Compiler-Direktive denke ich da an ein einfaches If-Else-Konstrukt.

Wie würdet ihr das machen, um doppelten Code zu vermeiden?

Headbucket 28. Dez 2016 11:37

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

a.def 28. Dez 2016 12:00

AW: Code für zwei Vorschleifen bereitstellen? Dumme Frage!
 
Zitat:

Zitat von Headbucket (Beitrag 1357331)
Hallo,
1. Methode: Parallele Schleife
2. Methode: Sequentielle Schleife
3. Methode: Do something (gemeinsamer Code)
Headbucket

An etwas in der Art hatte ich auch schon gedacht nur nicht sehr weit.
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 17:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz