AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehre Threads: wie Daten übergeben

Ein Thema von p80286 · begonnen am 11. Apr 2017 · letzter Beitrag vom 12. Apr 2017
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.355 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Mehre Threads: wie Daten übergeben

  Alt 11. Apr 2017, 17:00
Du bist da offenbar bei Deiner Fragestellung etwas durcheinander gekommen.

Wird fListe nun im Thread neu createt oder wird Liste der fListe zugewiesen (und warum überhaupt)?

Im ersten Fall musst Du fListe freigeben, was keine Auswirkungen auf Liste hat.
Im zweiten Fall entspricht fListe = Liste und Du darfst diese nicht freigeben.

Ich denke, Du musst Dein Problem nochmal konkretisieren...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#2

AW: Mehre Threads: wie Daten übergeben

  Alt 11. Apr 2017, 17:20
Entweder das:
Delphi-Quellcode:
thread.Create(const liste:tstringlist);
begin
   fListe:=tstringlist.create;
   fListe.Assgin(Liste);
end;

 thread.execute;
begin
   machwasmitfliste;
    
   //Hier muss fListe aber noch zurück in liste

  fliste.free {ja!!!!}
end;
oder das
Delphi-Quellcode:
thread.Create(const liste:tstringlist);
begin
   fListe:=liste;
end;

 thread.execute;
begin
   machwasmitfliste;
  //fliste.free {nein!!!
end;
Ein fListe:=TStringList.Create macht ja keinen Sinn, wenn ich danach den der Variable fListe einfach mal auf eine andere STringList zeigen lassen. Und wenn ich das dann noch Freigebe, ist die Globale Liste weg.

Mit der zweite Variante wirst du dir aber über kurz oder lang ärger einhandeln.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Mehre Threads: wie Daten übergeben

  Alt 11. Apr 2017, 21:51
Du bist da offenbar bei Deiner Fragestellung etwas durcheinander gekommen.

Ich denke, Du musst Dein Problem nochmal konkretisieren...
Nö, ich hab mir da nur selbst auf der Leitung gestanden.
Hobbycoder hat mich auf den richtigen Weg gebracht, wobei mir nicht so ganz kar ist warum fListe=liste; mir früher oder später Ärger bereiten sollte, wenn sicher ist, daß nicht mehrere Threads gleichzeitig zugreifen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#4

AW: Mehre Threads: wie Daten übergeben

  Alt 11. Apr 2017, 22:04
Zitat:
Delphi-Quellcode:
thread.Create(const liste:tstringlist);
begin
  fListe:=tstringlist.create;
end;

thread.execute;
begin
  machwasmitfliste;
 fliste.free {------------------ ja oder nein????}
end;
Nein.

Freigabe natürlich möglichst immer in der selben Ebene, wo es auch erstellt wurde.

Create -> Destroy
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#5

AW: Mehre Threads: wie Daten übergeben

  Alt 12. Apr 2017, 09:06
Hobbycoder hat mich auf den richtigen Weg gebracht, wobei mir nicht so ganz kar ist warum fListe=liste; mir früher oder später Ärger bereiten sollte, wenn sicher ist, daß nicht mehrere Threads gleichzeitig zugreifen.
Ich meinte jetzt nicht explizit in diesem Fall, sondern eher im allgemeinen.
Ich kenn ja deinen Restcode nicht. Wenn alles wirklich synchronisiert abläuft, dann sollte es ja gehen. Trotzdem versuch ich sowas zu vermeiden. Schon allein, der Wiederverwendbarkeit halber.

Ein synchronisierter Zugriff auf Daten außerhalb des Thread ist ja nicht unüblich, und letztlich spielt es dabei ja keine Rolle ob es sich bei dem Object um eine Stringlist handelt, ein GUI-Object oder sonst irgendeine Variable, solange es synchronisiert abläuft.

Interessant wird das allerdings beim Debuggen, wenn der Inhalt der Liste von verschiedenen Threads verändert wird. Aber wie gesagt, das hängt natürlich stark von dem Restcode ab.

Und Last-but-not-least, ist das mit dem Freigeben gerade in größeren Projekten so eine Sache, wenn man auf Objecte zugreift, deren Existenz nicht in der Kontrolle des zugreifenden Thread liegt. Entweder es wird einem mal das Object unter dem Arsch weggezogen oder es bleiben Speicherleichen zurück. Das muss zwar nicht grundsätzlich so sein, aber in großen Projekten kommt das schneller vor, als man denkt. Und im zweiten Fall kommt es ja noch nicht mal zu einer Exception.

Geändert von Hobbycoder (12. Apr 2017 um 09:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Mehre Threads: wie Daten übergeben

  Alt 12. Apr 2017, 12:08
Vielen Dank an alle!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 13:14 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