Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 29.03.13 12:40 
Hey,

bin gerade auf ein Problem gestoßen, das ich nicht so ganz verstehe.
Beispiel :
ausblenden volle Höhe 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}

{ TTestThread }

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: HenryHux