Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#3

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 21:47
wenn es nur um den CPU-Load des eigenen Processes geht, ist dies sehr einfach:
Delphi-Quellcode:
var
  LastTick : LongWord;
  LastTime : Int64;
  CPUCount : Word;


// einmal initialisieren:

Var
  CreationTime,
  ExitTime,
  KernelTime,
  UserTime : TFILETIME;
  SystemInfo : TSystemInfo
Begin
  LastTick:=GetTickCount();

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

  GetSystemInfo(SystemInfo);
  CPUCount:=SystemInfo.dwNumberOfProcessors;


// periodisch aufrufen (z.B. jede Sekunde):

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);

  Label.Caption:=Format('CPU load: %.1f %%',[TimeDelta / 10000 / CPUCount / TickDelta * 100]);
PS: ev. wäre dies etwas für die Codelib, da diese Frage immer wieder kommt......
  Mit Zitat antworten Zitat