Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CPU-Verbrauch --> Debugger Exception (https://www.delphipraxis.net/100094-cpu-verbrauch-debugger-exception.html)

Störtebeker 22. Sep 2007 01:08


CPU-Verbrauch --> Debugger Exception
 
Hi,

wollte mit Hilfe eines Timers und einem Label den CPU-Verbrauch meines Programms anzeigen und stoße auf folgendes Problem:

Code für den Timer:

Delphi-Quellcode:
.
.
.
{$R *.dfm}
var
  LastTick : LongWord;
  LastTime : Int64;
  CPUCount : Word;
.
.
.
procedure TForm5.Timer3Timer(Sender: TObject);
Var
  CreationTime,
  ExitTime,
  KernelTime,
  UserTime : TFILETIME;
  TickDelta : LongWord;
  TimeDelta : Int64;
begin
  TickDelta:=GetTickCount() - LastTick;
  Inc(LastTick,TickDelta);

  GetProcessTimes(GetCurrentProcess(),CreationTime,ExitTime,KernelTime,UserTime);
  TimeDelta:=(Int64(KernelTime) + Int64(UserTime)) - LastTime;
  Inc(LastTime,TimeDelta);

  Label15.Caption:=Format('%.1f %%',[TimeDelta / 10000 / CPUCount / TickDelta * 100]);
end;
.
.
.
wenn ich auf Starten drücke, kommt Delphi kurz darauf mit:

Zitat:

Debugger Exception Notification
Project Project1.exe raised exception class EZeroDivide with message "Floating point division by zero". Process stopped. Use Step or Run to continue.
Irgendwie finde ich den Fehler nicht. Ich hoffe sehr auf eure Hilfe.

mfG
Störtebeker

P.S.: Ohne den Code funzt das Programm. Also muss der Fehler im Code des Timers liegen.

Christian Seehase 22. Sep 2007 01:19

Re: CPU-Verbrauch --> Debugger Exception
 
Moin Störtebeker,

wenn ich das richtig sehe, hast Du vergessen CPUCount zu initialisieren.

SirThornberry 22. Sep 2007 07:30

Re: CPU-Verbrauch --> Debugger Exception
 
der fehler sagt aus das du durch 0 teilst. Also einfach Haltepunkt auf diese zeile
Delphi-Quellcode:
Label15.Caption:=Format('%.1f %%',[TimeDelta / 10000 / CPUCount / TickDelta * 100]);
und schauen welcher deiner Werte 0 ist.
Zudem solltest du den Variablen vorher auch Werte zuweisen. Wie Christian Seehase hast du CPUCount zum Beispiel nix zugewiesen und darfst auch nicht davon ausgehen das es 0 ist. Denn lokale Variablen den nicht zugewiesen wurde enhalten einen zufälligen wert.
Aber selbst wenn es 0 ist hast du ein Problem weil teilen durch 0 nicht erlaubt ist (mathematich nicht erlaubt).

Störtebeker 22. Sep 2007 10:51

Re: CPU-Verbrauch --> Debugger Exception
 
Thx. für eure Tipps. Es geht jetzt. Das Problem war, ich musste den Code auch noch ins FormCreate Ereignis setzten, zusätzlich zum TimerEreignis.

Trotzdem Danke.

WS1976 22. Sep 2007 10:52

Re: CPU-Verbrauch --> Debugger Exception
 
Hallo,
wenn ich davon ausgehe, dass CPUCount die Anzahl der prozessorkerne ist, so ist
Delphi-Quellcode:
Begin
  CPUCount:=1;
nach dem Begin die Lösung deines Problems.

Grüsse
Rainer

WS1976 22. Sep 2007 10:54

Re: CPU-Verbrauch --> Debugger Exception
 
Hallo Störtebecker,

das kann nicht die Lösung deines Problems sein CPUCount ist völlig willkürlich gesetzt und das hat nichts damit zu tun ob das Ganze im create oder timer steht.

Ausserdem:
Zitat:

TimeDelta / 10000 / CPUCount / TickDelta * 100
Ist das hier eine rein mathematisch etwas bedenkliche Schreibweise.
Ich würde lieber zusätzlich Klammern setzen. (Aber das ist Ansichtssache)

Grüsse
Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.

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