Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Performance Problem mit Timern (https://www.delphipraxis.net/54201-performance-problem-mit-timern.html)

Ben-G 29. Sep 2005 15:39


Performance Problem mit Timern
 
Hi! Hab ein ziehmlich großes Problem. Ich programmiere gerade einen Formel 1 Manager. Hierfür habe ich für jedes der 20 Autos einen Timer verwendet (sehr amateurhaft ich weiß^^), mittlerweile kann ich das nicht mehr ändern, da alles darauf aufbaut. Was könnte ich machen um die Performance trotz der vielen Timer zu verbessern? kann mir vllt jemand helfen? :?: :?:

Union 29. Sep 2005 15:41

Re: Performance Problem mit Timern
 
Zitat:

Zitat von Ben-G
Hi! Hab ein ziehmlich großes Problem. Ich programmiere gerade einen Formel 1 Manager. Hierfür habe ich für jedes der 20 Autos einen Timer verwendet (sehr amateurhaft ich weiß^^), mittlerweile kann ich das nicht mehr ändern, da alles darauf aufbaut. Was könnte ich machen um die Performance trotz der vielen Timer zu verbessern? kann mir vllt jemand helfen? :?: :?:

Du solltest lieber Threads verwenden, die Anzahl der Timer ist AFAIK auch durchs System begrenzt.

Ben-G 29. Sep 2005 15:44

Re: Performance Problem mit Timern
 
Sorry wenn ich so blöd frag, aber was meinst du denn mit Threads verwenden?

Union 29. Sep 2005 15:52

Re: Performance Problem mit Timern
 
Zitat:

Zitat von Ben-G
Sorry wenn ich so blöd frag, aber was meinst du denn mit Threads verwenden?

Schaust Du hier: Delphi Tortillas von Luckie :cyclops:

Ben-G 29. Sep 2005 16:01

Re: Performance Problem mit Timern
 
ok danke... du meinst das hilft? nicht dass ich es umsonst lerne^^

Union 29. Sep 2005 16:07

Re: Performance Problem mit Timern
 
Zitat:

Zitat von Ben-G
ok danke... du meinst das hilft? nicht dass ich es umsonst lerne^^

Ein bisschen was über THreads zu lernen, hat noch nie jemandem geschadet ;) Ausserdem löst Du damit nebenbei auch Dein Performanceproblem. In der Tortilla ist auch eine leckere Demo-Füllung...

Ben-G 29. Sep 2005 16:13

Re: Performance Problem mit Timern
 
ok hört sich gut an :D
hat jemand noch weitere Lösungsvorschläge?

Union 29. Sep 2005 16:36

Re: Performance Problem mit Timern
 
Zitat:

Zitat von Ben-G
ok hört sich gut an :D
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).

Gandalfus 29. Sep 2005 16:42

Re: Performance Problem mit Timern
 
timer tutorial
http://www.blubplayer.de/tutorials.html

Ben-G 1. Okt 2005 07:20

Re: Performance Problem mit Timern
 
Hab jetzt eine Mischung aus beiden Vorschlägen genommen. Hab durch das Tutorial erfahren, dass der DXTimer ein Thread Timer ist und habe diesen eingesetzt. Die Performance hat sich dadurch auch erheblich verbessert, nur leider haben die Autos irgendwann Aussetzer und fahren nicht mehr weiter. Könnte es sein, dass die DXTimer aufgrund der Thread-"Hierarchie" nicht ausgeführt werden? Was könnte ich dagegen tun?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz