Zitat von
Ben-G:
ok hört sich gut an
hat jemand noch weitere Lösungsvorschläge?
Keine Angst, hier mal ein simples Beispiel: dort wird in 17 Threads in jeweils einer anderen Farbe eine Line zu eine Zufallsposition gezeichnet:
Delphi-Quellcode:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
MyThread = class(TThread)
private
Color : TColor;
Canvas : TCanvas;
protected
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
colors : array[0..16] of TColor
= (clBlue, clRed, clBlack, clGreen, clYellow, clWhite,
clNavy, clPurple, clTeal, clLime, clFuchsia, clAqua,
clMoneyGreen, clSkyBlue, clCream, clHighLight, clHotLight
);
var
i : integer;
begin
Randomize;
for i := 0 to length(colors) -1 do
begin
with MyThread.Create(true) do
begin
color := colors[i];
Canvas := self.Canvas;
Resume;
end;
end;
end;
{ MyThread }
procedure MyThread.Execute;
var
x, y : integer;
begin
x := 0;
y := 0;
while not Terminated do
begin
Canvas.Lock;
x := Random(800);
y := Random(600);
Canvas.Pen.Color := Color;
Canvas.LineTo(x,y);
Canvas.Unlock;
end;
end;
Du siehst, das Prinzip ist einfach. Du musst nur darauf achten, dass sich die Threads nicht in die Quere kommen (z.B. gleichzeitiger Zugriff auf Globale Objekte).