AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TList mit Record füllen und an weitere TList übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

TList mit Record füllen und an weitere TList übergeben

Ein Thema von dGeek · begonnen am 26. Aug 2016 · letzter Beitrag vom 26. Aug 2016
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#11

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:42
Clear löscht alle Elemente aus der Liste (und gibt sie ggf. frei), die Liste selbst bleibt aber erhalten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:43
Kann es sein, dass MeineObjectList.Clear; direkt auch Free igendwo aufruft?
Klar... Das ist ja genau der Trick!
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#13

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:49
Mhhhh kann ich eine ObjectList denn nicht leeren ohne das Object zu zerstören?

Hier knallt es:

Delphi-Quellcode:
// for-Schleife von 0 bis 1
if i > 0 then
 begin
  aTmpFileList_ObjectList.Clear; // <== da knallt es
 end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#14

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:50
OwnsObjects auf false setzen, dann bist Du selbst verantwortlich.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#15

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 12:15
Kann es sein, dass MeineObjectList.Clear; direkt auch Free igendwo aufruft?
Klar... Das ist ja genau der Trick!
Bittää?
Das wäre doch ein sehr überraschender Effekt. Wenn ein .Delete() oder ein .Clear ein .Free des ListenItems nach sich zieht ok, aber ein .Free auf die Liste??

Gruß
K-H

P.S.
die sieben Zeilen um in ein .Delete ein Dispose für den Pointer zu packen ist ja nun nicht DER Aufwand.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 12:18
Kann es sein, dass MeineObjectList.Clear; direkt auch Free igendwo aufruft?
Klar... Das ist ja genau der Trick!
Bittää?
Das wäre doch ein sehr überraschender Effekt. Wenn ein .Delete() oder ein .Clear ein .Free des ListenItems nach sich zieht ok, aber ein .Free auf die Liste??
Tut es ja nicht. Ich würde behaupten er hat sich nur falsch ausgedrückt oder zu schnell geschrieben. Die Liste selbst bleibt durch ein Clear selbstverständlich erhalten. Nur die Items darin werden (sofern OwnsObjects auf True) freigegeben. OwnsObjects kann mein Create oder aber auch nachträglich als Eigenschaft der Liste auf False bzw. True gesetzt werden.
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#17

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 14:27
Scheinbar mag mich die Object-List nicht.

Kurze erklärung:
ich habe eine Liste von Dateien.
Die speichere ich mit noch ein paar anderen Informationen in diese "Instanzen" von TFileEntry ab.
Alle Instanzen kommen dann in ObjectList-A.

Nun gehe ich diese ObjectList-A durch und teile sie in n-Stückchen auf. Mit diesen Stücken werden Threads gefüttert und gestartet.
Bei 100 Instanzen erhält bei 5 Threads jeder Threads also 20 Instanzen, die er abarbeiten soll.

Mein einfacher Test:
es gibt 10 Instanzen und 2 Threads. 5 Pro Thread.

jetzt das Seltsame: beide Threads bekommen dieselbe Instanz!

Meine Logik ist also:
- Dateiliste erstellen
- Für jede Datei 1 Instanz von TFileEntry erstellen
- alle Instanzen in die ObjectList-A

Nun ObjectList-A.Count durch die Anzahl der Threads teilen. Ergibt 5 Instanzen pro Thread / 2 Threads.
Diese 5 Instanzen werden in eine temporäre ObjectList-B geschrieben, die kurz vorher außerhalb der for-schleife erzeugt wird.
Am ende der for-Schleife übergebe ich ObjectList-B an eine Procedur wo nichts weiter drin steht als, dass ein TThread erzeugt werden soll. Er hat ein Property und das ist eine ObjectList.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 14:38
Scheinbar mag mich die Object-List nicht.

Kurze erklärung:
ich habe eine Liste von Dateien.
Die speichere ich mit noch ein paar anderen Informationen in diese "Instanzen" von TFileEntry ab.
Alle Instanzen kommen dann in ObjectList-A.

Nun gehe ich diese ObjectList-A durch und teile sie in n-Stückchen auf. Mit diesen Stücken werden Threads gefüttert und gestartet.
Bei 100 Instanzen erhält bei 5 Threads jeder Threads also 20 Instanzen, die er abarbeiten soll.

Mein einfacher Test:
es gibt 10 Instanzen und 2 Threads. 5 Pro Thread.

jetzt das Seltsame: beide Threads bekommen dieselbe Instanz!

Meine Logik ist also:
- Dateiliste erstellen
- Für jede Datei 1 Instanz von TFileEntry erstellen
- alle Instanzen in die ObjectList-A

Nun ObjectList-A.Count durch die Anzahl der Threads teilen. Ergibt 5 Instanzen pro Thread / 2 Threads.
Diese 5 Instanzen werden in eine temporäre ObjectList-B geschrieben, die kurz vorher außerhalb der for-schleife erzeugt wird.
Am ende der for-Schleife übergebe ich ObjectList-B an eine Procedur wo nichts weiter drin steht als, dass ein TThread erzeugt werden soll. Er hat ein Property und das ist eine ObjectList.
Zeig mal etwas SourceCode. Dann wird es vmtl. einfacher dir zu helfen.

Ich könnte mir vorstellen wo dein Fehler ist, aber ich will nicht wild drauf losraten.
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#19

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 14:51
Ihr werdet mich für den Code HASSEN (poste ich gleich aber erst eine Frage).

Ich habe mittlerweile herausgefunden, dass wenn ich nach der Procedur die den Thread erstellt eine Showmessage mache, alles korrekt abläuft. Scheint also ein sehr suspektes Zeitproblem zu sein.

geht deine Vermutung in diese Richtung?
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 14:59
geht deine Vermutung in diese Richtung?
Nein eher nicht. Es kann natürlich sein, das ich mit meiner Vermutung total falsch liege.

Ihr werdet mich für den Code HASSEN
Jeder hat doch mal klein angefangen. Als ich das erste Mal mit ObjectLists gearbeitet hatte, ging auch nicht alles direkt. Heute will ich sie nicht mehr missen. Da hakte es auch an der ein oder anderen Stelle. Und die Formatierung des SourceCodes kannst du ja schnell durch die IDE machen lassen falls du das meinst.

Geändert von Aviator (26. Aug 2016 um 15:01 Uhr) Grund: Noch was hinzugefügt ;)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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:25 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