AGB  ·  Datenschutz  ·  Impressum  







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

Parameter an Thread übergeben

Ein Thema von IMPEGA · begonnen am 8. Sep 2013 · letzter Beitrag vom 2. Okt 2013
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

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

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 08:31
Und wenn Du einen Pointer auf den Record an den Thread übergibst und innerhalb des Threads auf diesen zugreifst?
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
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#2

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 08:52
Ich habe gerade nochmal den Informationsfluss von Mainform zu Thread ueberprueft. Der Inhalt des Records im Mainform kommt definitv im Thread an. Kann es sein dass Uebergaben bei Threads nicht per call-by-reference geschehen? Dann wunder ich mich aber, dass bei uebergebenen VCL Komponenten ein synchronize moeglich ist.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 08:59
Objekte, also auch VCL-Komponenten, werden immer als Referenz übergeben und in Referenzvariablen gespeichert.
Deine interne Record-Variable ist aber keine Referenz, sondern eine Kopie.
Delphi-Quellcode:
type
  PMyVar = ^TMyVar;

  TMyThread = class(TThread)
  private
    FExtVar: PMyVar;
    FMyVar: TMyVar;
    CopyToExtVar;
    DoOnTerminate; override;
  public
    {darf nur im constructor oder vor dem Resume aus dem Hauptthread aufgerufen werden}
    InitMyVar(var MV: TMyVar);
  end;

procedure TMyThread.InitMyVar(var MV: TMyVar);
begin
  {Verweis auf externe Variable}
  FExtVar := @MV;
  {Kopie der externen Variable}
  FMyVar := MV;
end;

procedure TMyThread.DoOnTerminate;
begin
  {wird beim Beenden im Thread aufgerufen}
  if Assigned(FExtVar) then
    Synchronize(CopyToExtVar);
  inherited;
end;

procedure TMyThread.CopyToExtVar;
begin
  {interne Variable in die externe Variable kopieren}
  if Assigned(FExtVar) then
    FExtVar^ := FMyVar;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 09:04
IIRC wird durch die Zuweisung des Parameters an das private Feld eine Kopie des Records erzeugt, da nützt auch die "var"-Angabe nichts. Übergibt man hingegen den Pointer, arbeitet man tatsächlich mit dem Original. Objektinstanzen sind übrigens intern auch Pointer, daher funktioniert das damit.
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 09:42
Objektinstanzen sind übrigens intern auch Pointer, daher funktioniert das damit.
Richtiger:
Objektvariablen sind Pointer die auf eine Instanz der Klasse (oder einer abegleiteten Klasse) verweisen.
Bei der Zuweisung einer Objektvariablen wird nicht die Instanz kopiert, sondern nur deren Adresse weitergegeben.
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#6

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 09:08
hmm genau das scheint der Fall zu sein. Records werden anscheinend nur call-by-value an Threads uebergeben. Siehe folgende Diskussion:

http://stackoverflow.com/questions/9...y-of-an-object

Der letzte Vorschlag in der Liste entspricht der Idee von DeddyH einen Pointer auf das Array zu uebergeben. Ganz wohl ist mir dabei nicht, da ich nicht sicher bin ob das Terminieren des Threads ein moegliches Problem darstellen koennte.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 09:35
Solange Du nicht auf die Idee kommst, beim Terminieren des Threads ein Dispose auf den Pointer loszulassen, wüsste ich nicht, was für Probleme auftreten sollten.
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
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 12:02 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