Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozessor Auslastung (https://www.delphipraxis.net/48379-prozessor-auslastung.html)

tobias2207 24. Jun 2005 09:37


Prozessor Auslastung
 
hi,

gibt es eigentlich die möglichkeit durch eine funktion oder ähnliches, die prozessor Auslastung eines windows oder linux rechners herauszufinden?

vielen dank..

Luckie 24. Jun 2005 10:12

Re: Prozessor Auslastung
 
Und auch hier hilft die Suche weiter: Hier im Forum suchencpu auslastung. :roll:

Aber für beide Systeme einen Code wirst du nicht finden, da du die Schnittstelle nehmen musst, die dir das System bietet.

tobias2207 24. Jun 2005 10:59

Re: Prozessor Auslastung
 
danke

tobias2207 24. Jun 2005 12:48

Re: Prozessor Auslastung
 
suche: cpu auslastung

= Keine Beiträge entsprechen Deinen Kriterien.

MagicAndre1981 24. Jun 2005 12:51

Re: Prozessor Auslastung
 
Zitat:

Zitat von tobias2207
suche: cpu auslastung

= Keine Beiträge entsprechen Deinen Kriterien.

Das halte ich für ein Gerücht. Markiere beide Wörter und geh auf den 1. Button unten rechts (Button mit Lupe und DP-Symbol).

Dann öffnet sich die DP-Suche und da gibts viele Treffer ;-)

André

tobias2207 24. Jun 2005 13:06

Re: Prozessor Auslastung
 
Liste der Anhänge anzeigen (Anzahl: 3)
hi,

gerüchte sind echt nicht mein ding..
aber vielleicht liegts ja an opera, werd mal mit dem IE probieren..

[edit=Admin]Bilder vom BMP-Format ins JPG-Format konvertiert. Mfg, Daniel[/edit]

DirectFromHell 24. Jun 2005 13:12

Re: Prozessor Auslastung
 
hmm ich kriege da Ergebnisse :gruebel:
Naja schau mal hier

tobias2207 24. Jun 2005 13:23

Re: Prozessor Auslastung
 
hi,

also im IE klappts auch nicht - werds mal unter nem anderen beutzer versuchen..

vielen dank für den link

Tonic1024 24. Jun 2005 14:30

Re: Prozessor Auslastung
 
Hi...

Lag zufällig auf meiner Platte, hatte ich mal bei Torry rausgesucht und für nützlich befunden. Getestet unter W2K.

Delphi-Quellcode:
// Beispielcode für CPU-Last-Anzeige. Gefunden bei Torry.

// Neues Form erstellen und den Quelltext komplett ersetzen.
// Button1 und Label1 aufs Form legen und OnClick für den
// Button verbinden.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  SystemBasicInformation = 0;
  SystemPerformanceInformation = 2;
  SystemTimeInformation = 3;

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


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

implementation

{$R *.dfm}

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;

end.
regards

Toni

150gozilla 6. Okt 2005 09:32

Re: Prozessor Auslastung
 
jopp geht, aber der frisst ganz schön viel speicher


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 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