Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Unterschiedliche Werte einer ThreadVar in Create und Execute
HenryHux - Fr 29.03.13 12:40
Titel: Unterschiedliche Werte einer ThreadVar in Create und Execute
Hey,
bin gerade auf ein Problem gestoßen, das ich nicht so ganz verstehe.
Beispiel :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| TTestThread = class(TThread) constructor create; procedure Execute; override; end;
var Form1: TForm1;
threadvar Test : Integer;
implementation
{$R *.dfm}
constructor TTestThread.create; begin inherited; Test := 12; ShowMessage('Create ' + IntToStr(Test)); end;
procedure TTestThread.Execute; begin inherited; ShowMessage('Execute ' + IntToStr(Test)); end;
procedure TForm1.btn1Click(Sender: TObject); var TestThread : TTestThread; begin TestThread := TTestThread.create; end; |
Wird mir Create 12 und Execute 0 angezeigt.
Das ist doch nicht der Sinn von Thread Variablen oder habe ich da etwas falsch verstanden?
lg
bummi - Fr 29.03.13 13:18
Mit threadvar deklarierte Variablen werden für jeden Thread mit 0 initialisiert bereitgestellt. In Deinem Beispiel hast Du faktische 2 Variablen mit dem Namen "Test". Bei TTestThread.create; bist Du noch im Kontext des Mainthread und manipulierts Test des Haupthreads, im TTestThread.execute greifts Du auf Test des Threads zu.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!