AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Code für zwei For-Schleifen bereitstellen? Dumme Frage!
Thema durchsuchen
Ansicht
Themen-Optionen

Code für zwei For-Schleifen bereitstellen? Dumme Frage!

Ein Thema von a.def · begonnen am 28. Dez 2016 · letzter Beitrag vom 28. Dez 2016
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

Code für zwei For-Schleifen bereitstellen? Dumme Frage!

  Alt 28. Dez 2016, 11:31
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?
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

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

  Alt 28. Dez 2016, 11:37
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
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

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

  Alt 28. Dez 2016, 12:00
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

Geändert von a.def (28. Dez 2016 um 12:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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