AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Generelle Fragen zu TParallel.For
Thema durchsuchen
Ansicht
Themen-Optionen

Generelle Fragen zu TParallel.For

Ein Thema von a.def · begonnen am 27. Dez 2016 · letzter Beitrag vom 1. Jan 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Generelle Fragen zu TParallel.For

  Alt 31. Dez 2016, 21:15
In der ersten Schleife zählst Du von 0 bis zum berechneten Wert.

Mit diesem Wert beginnst Du die zweite Schleife. Die müsste aber beim ersten Wert hinter dem Ende der ersten Schleife beginnen.

Müsste es nicht eher so aussehen?
Delphi-Quellcode:
program Test;
var
        i : Integer;
        run1 : Integer;
        run2 : Integer;
        sl : TStringList;
begin
  sl := TStringList.Create;
  for i := 0 to 100 do sl.Add('');
  run1 := 0;
  run2 := 0;

  for i := 0 to (sl.Count div 2) do Inc(run1);

  for i := (run1 + 1) to sl.Count - 1 do Inc(run2);

  ShowMessage('Von ' + IntToStr(0) + ' bis ' + IntToStr(run1) + #13#10 + 'Von ' + IntToStr(run1 + 1) + ' bis ' + IntToStr(sl.Count - 1));
  sl.Free;
end.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Generelle Fragen zu TParallel.For

  Alt 31. Dez 2016, 21:22
Dein Ansatz funktioniert.
Folgender funktioniert auch
Beides scheint aber nicht perfekt zu funktionieren.

Delphi-Quellcode:
iTmp := -1;
iTmpEx := 0;

slMidIndex := slSource.Count div 2; // center of list's items
slHighIndex := slSource.Count - 1; // end of list

for i := slMidIndex to slHighIndex do
 Inc(iTmp);

for i := slHighIndex downto slMidIndex do
 Inc(iTmpEx);

ShowMessage('Von ' + IntToStr(0) + ' bis ' + IntToStr(iTmp) + sLineBreak + 'Von ' + IntToStr(iTmp + 1) + ' bis ' + IntToStr(slHighIndex));
 
// 9 Einträge
// Von 0 bis 4
// Von 5 bis 8

// 10 Einträge
// Von 0 bis 4
// Von 5 bis 9

// 11 Einträge
// Von 0 bis 5
// Von 6 bis 10

// http://stackoverflow.com/questions/9211772/how-to-split-one-stringlist-into-two-string-lists-in-delphi

Geändert von a.def (31. Dez 2016 um 21:34 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Generelle Fragen zu TParallel.For

  Alt 31. Dez 2016, 21:43
Nein, der Startwert der zweiten Schleife muss um eins größer sein, als der Endwert der ersten Schleife, andernfalls sind der letzte Wert der ersten For-Schleife und der Startwert der zweiten For-Schleife identisch und es wird ein Verarbeitungsschritt zweimal durchgeführt.

Bei Deiner derzeitigen Variante wird zweimal die obere Hälfte der Liste verarbeitet.

Einmal von der Mitte bis zum Ende und einmal vom Ende bis zur Mitte. Die Ausgabe suggeriert jedoch, es würden beide Hälften verarbeitet.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Generelle Fragen zu TParallel.For

  Alt 31. Dez 2016, 22:20
Ein paar Tests von mir (10 Dateien eines Verzeichnisses kopieren) sind bisher alle ohne Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#5

AW: Generelle Fragen zu TParallel.For

  Alt 1. Jan 2017, 12:15
Ein paar Tests von mir (10 Dateien eines Verzeichnisses kopieren) sind bisher alle ohne Fehler.
Würdest du es bemerken, wenn eine von den 10 Dateien doppelt kopiert würde?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: Generelle Fragen zu TParallel.For

  Alt 1. Jan 2017, 12:35
Ein paar Tests von mir (10 Dateien eines Verzeichnisses kopieren) sind bisher alle ohne Fehler.
Würdest du es bemerken, wenn eine von den 10 Dateien doppelt kopiert würde?
Ja. Genau für diesen Fall habe ich in meiner Demo eine ListBox wo eine Art "Journal" geführt wird.
Zusätzlich wird mir vorher die fertige Liste angezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#7

AW: Generelle Fragen zu TParallel.For

  Alt 1. Jan 2017, 14:09
Diese beiden Schleifen

Delphi-Quellcode:
for i := slMidIndex to slHighIndex do
 Inc(iTmp);

for i := slHighIndex downto slMidIndex do
 Inc(iTmpEx);
durchlaufen beide denselben (oberen) Index-Bereich, nur anders herum. Der untere Teil von 0 bis slMidIndex - 1 wird gar nicht abgedeckt. Andererseits zählst du in diesem Beispiel auch nur zwei Zähler hoch und greifst nicht auf die Einträge der Liste zu. Am Ende interpretierst du dann aber die Endwerte der Zähler als etwas, das sie gar nicht sind.

ShowMessage('Von ' + IntToStr(0) + ' bis ' + IntToStr(iTmp) + sLineBreak + 'Von ' + IntToStr(iTmp + 1) + ' bis ' + IntToStr(slHighIndex));
Dabei stellt iTmp aber lediglich die Anzahl Durchläufe der ersten Schleife dar. Das deckt sich aber nicht mit der Meldung in ShowMessage.

Der Code, den du hier zeigst, ist ganz offensichtlich nicht der, den du ausführst.

Ehrlich gesagt, verstehe ich überhaupt nicht, wo das Problem ist. Das Splitten einer Liste in zwei nahezu gleich große Teile ist doch wirklich trivial.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 16:44 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