AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CPU Auslastung auslesen

Ein Thema von mind87 · begonnen am 15. Mai 2008 · letzter Beitrag vom 16. Mai 2008
Antwort Antwort
mind87

Registriert seit: 15. Mai 2008
19 Beiträge
 
#1

CPU Auslastung auslesen

  Alt 15. Mai 2008, 23:40
Guten Abend,

habe vor eine Programm zu schreiben, das diverse Systeminformationen ausliest u.a. CPU und RAM Auslastung. Einen Code für die RAM Auslastung, sowohl als grafische als auch werte basierend habe ich schon.

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  x, y: real;
  memory: TMemoryStatus;
  Ram_ani, Ram : integer;
  aRam:string;

begin
  memory.dwLength := SizeOf(memory);
  GlobalMemoryStatus(memory);
  x := memory.dwTotalPhys - memory.dwAvailPhys;
  y := memory.dwTotalPhys;
  Ram:=round(((x/y)*100));
  str(Ram, aRam);
  edit2.text:=aRam;
  Ram_ani := round(((x/y)*100));
  ProgressBar1.Position := Ram_ani;

end;
Kann mir jemand helfen dies auch für die CPU Auslastung zu schaffen? Im Forum habe ich zwar einen Code gefunden allerdings wird dort die Auslastung der einzelnen Prozesse ausgegeben. Bin in Sachen Delphi-Programmieren noch eher ein Grünschnabel von daher wäre ich mit einem einfachen Lösungsweg zufrieden bei dem das Ziel erreicht wird (auch wenns quick and dirty ist).

Hoffe jemand kann mir weiterhelfen.

Gruß Daniel
  Mit Zitat antworten Zitat
Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#2

Re: CPU Auslastung auslesen

  Alt 15. Mai 2008, 23:44
einfach nur den titel deines thread bei google eingegeben xD:

die schweizer ...

mfg smallsmoker

€: hier gibt es das ganze in einer extra unit und mit einer prozedur

cpu usage
  Mit Zitat antworten Zitat
Benutzerbild von LoCrux
LoCrux

Registriert seit: 5. Mär 2007
Ort: Gwang-Yang-City
48 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: CPU Auslastung auslesen

  Alt 16. Mai 2008, 06:55
HIER cxCPU

EDIT: ANHANG..BESSER
Angehängte Dateien
Dateityp: zip cxcpu4_r4200_100.zip (467,1 KB, 247x aufgerufen)
“C++ is an insult to the human brain.” [Niklaus Wirth]

2B OR NOT 2B (.. THAT IS FF)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: CPU Auslastung auslesen

  Alt 16. Mai 2008, 09:45
Hi, ich hab mir jetzt die Units / Komponenten meiner Vorposter nicht angesehen, aber falls nicht, ich hatte vor Jahren mal ein ähnliches Projekt und kam zu dem Schluß, wenn ich die CPU Usage ermitteln will, währe es von Vorteil, das in einem seperaten Thread zu machen, weil ewig beim Aufruf in meiner Anwendung sich diese eingefroren hatte...

Kuckst Du hier:

Delphipages
  Mit Zitat antworten Zitat
mind87

Registriert seit: 15. Mai 2008
19 Beiträge
 
#5

Re: CPU Auslastung auslesen

  Alt 16. Mai 2008, 19:45
Zitat von smallsmoker:
einfach nur den titel deines thread bei google eingegeben xD:

die schweizer ...

mfg smallsmoker

€: hier gibt es das ganze in einer extra unit und mit einer prozedur

cpu usage
Danke für die Antwort. Habe es gerade eben versucht, bekomme aber bei compilieren eine Fehlermeldung: "Fehler im Modul Unit1: Deklaration der Klasse TForm1 fehlt oder ist fehlerhaft." Ich habe alles in eine Unit geschrieben. Hat jemand eine Idee wo der Fehler zu suchen ist? Danke im Voraus.

Delphi-Quellcode:
const
  SystemBasicInformation = 0;
  SystemPerformanceInformation = 2;
  SystemTimeInformation = 3;

type
  TPDWord = ^DWORD;

  TSystem_Basic_Information = packed record
    dwUnknown1: DWORD;
    uKeMaximumIncrement: ULONG;
    uPageSize: ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage: ULONG;
    uMmHighestPhysicalPage: ULONG;
    uAllocationGranularity: ULONG;
    pLowestUserAddress: Pointer;
    pMmHighestUserAddress: Pointer;
    uKeActiveProcessors: ULONG;
    bKeNumberProcessors: byte;
    bUnknown2: byte;
    wUnknown3: word;
  end;

type
  TSystem_Performance_Information = packed record
    liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}
    dwSpare: array[0..75] of DWORD;
  end;

type
  TSystem_Time_Information = packed record
    liKeBootTime: LARGE_INTEGER;
    liKeSystemTime: LARGE_INTEGER;
    liExpTimeZoneBias: LARGE_INTEGER;
    uCurrentTimeZoneId: ULONG;
    dwReserved: DWORD;
  end;

var
  NtQuerySystemInformation: function(infoClass: DWORD;
    buffer: Pointer;
    bufSize: DWORD;
    returnSize: TPDword): DWORD; stdcall = nil;


  liOldIdleTime: LARGE_INTEGER = ();
  liOldSystemTime: LARGE_INTEGER = ();

function Li2Double(x: LARGE_INTEGER): Double;
begin
  Result := x.HighPart * 4.294967296E9 + x.LowPart
end;

procedure GetCPUUsage;
var
  SysBaseInfo: TSystem_Basic_Information;
  SysPerfInfo: TSystem_Performance_Information;
  SysTimeInfo: TSystem_Time_Information;
  status: Longint; {long}
  dbSystemTime: Double;
  dbIdleTime: Double;

  bLoopAborted : boolean;

begin
  if @NtQuerySystemInformation = nil then
    NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
      'NtQuerySystemInformation');

  // get number of processors in the system

  status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil);
  if status <> 0 then Exit;

  // Show some information
  with SysBaseInfo do
  begin
      ShowMessage(
      Format('uKeMaximumIncrement: %d'#13'uPageSize: %d'#13+
      'uMmNumberOfPhysicalPages: %d'+#13+'uMmLowestPhysicalPage: %d'+#13+
      'uMmHighestPhysicalPage: %d'+#13+'uAllocationGranularity: %d'#13+
      'uKeActiveProcessors: %d'#13'bKeNumberProcessors: %d',
      [uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages,
      uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity,
      uKeActiveProcessors, bKeNumberProcessors]));
  end;


  bLoopAborted := False;

  while not bLoopAborted do
  begin

    // get new system time
    status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0);
    if status <> 0 then Exit;

    // get new CPU's idle time
    status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);
    if status <> 0 then Exit;

    // if it's a first call - skip it
    if (liOldIdleTime.QuadPart <> 0) then
    begin

      // CurrentValue = NewValue - OldValue
      dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
      dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

      // CurrentCpuIdle = IdleTime / SystemTime
      dbIdleTime := dbIdleTime / dbSystemTime;

      // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
      dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;

      // Show Percentage
      Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %',dbIdleTime);

      Application.ProcessMessages;

      // Abort if user pressed ESC or Application is terminated
      bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or Application.Terminated;

    end;

    // store new CPU's idle and system time
    liOldIdleTime := SysPerfInfo.liIdleTime;
    liOldSystemTime := SysTimeInfo.liKeSystemTime;

    // wait one second
    Sleep(1000);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  GetCPUUsage
end;
[edit=Matze][delphi]-Tags gesetzt. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
mind87

Registriert seit: 15. Mai 2008
19 Beiträge
 
#6

Re: CPU Auslastung auslesen

  Alt 16. Mai 2008, 21:39
Habe den Fehler gefunden, hatte eine Type Deklaration die im Standardforumlar vorhanden ist. Nun funktioniert es. Danke für die Hilfe.

Gruß Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
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