Autor Beitrag
GR-Thunderstorm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: Mi 09.11.11 00:31 
Ich habe 2 verschiedene procedures (Member von TForm1), die von je einem Thread ausgeführt werden sollen. Den Threads habe ich Namen gegeben, die die Bezeichnung der jeweiligen procedure widerspiegeln.

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:
34:
35:
36:
37:
38:
39:
40:
41:
42:
type TDrawThread = class(TThread)
  Ident: String;
  procedure SetName(Name: String);
public
  procedure Execute(); override;
  property ThreadName: String read Ident write SetName;
end;

implementation

procedure TDrawThread.SetName(Name: String);
begin
  Ident:=Name;
end;

procedure TDrawThread.Execute();
var Loop: Boolean;
begin
  while Loop do
  begin
    Form1.FindComponent('Draw' + ThreadName);
    Sleep(10);
  end;
end;



procedure TForm1.DrawPlane();
(...)
procedure TForm1.DrawCurve(XOffset: Integer; YOffset: Integer; Size: Integer);
(...)

procedure TForm1.FormCreate(Sender: TObject);
begin
  CurveThread:= TDrawThread.Create(true);
  PlaneThread:= TDrawThread.Create(true);


  PlaneThread.ThreadName:='Plane';
  CurveThread.ThreadName:='Curve';

end;


Meine Frage ist jetzt, wie kann ich das realisieren, dass die entsprechende procedure, vor allem mit den Übergabewerten bei DrawCurve, aufgerufen werden?

Ja ich weiß, man könnte auch mit "if ThreadName = 'Plane' then DrawPlane else DrawCurve;" arbeiten, aber geht es nicht doch einen Tick eleganter?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 08.11.2011 um 23:46
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 09.11.11 00:53 
Wenn es nicht gar so aberwitzig wäre könntest Du, wenn die Prozedurparameter für beide Prozeduren gleich wären, in einem Überschriebenen Konstruktor einen Zeiger auf die Methode mitgeben, wenn nicht verschiedene Konstruktoren vorsehen.
Allerdings ist das was Du vorhast, aus einem Thread heraus ohne synchronize auf die VCL zuzugreifen ein NoGo...

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