Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Performance Problem mit Timern

  Alt 29. Sep 2005, 17:36
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).
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat