AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie kann ich die CPU auslastung in einer ProgressBar anzeige
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich die CPU auslastung in einer ProgressBar anzeige

Ein Thema von ObLtpatriz · begonnen am 12. Mai 2006 · letzter Beitrag vom 13. Mai 2006
Antwort Antwort
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#1

Wie kann ich die CPU auslastung in einer ProgressBar anzeige

  Alt 12. Mai 2006, 23:56
Moin

Ich habe die Boardsuche und Google verwendet aber leider , nicht die gewünschte antwort zu meinem problem gefunden.


Ich verwende diesen quelltext um die CPU Auslastung in einer sich laufend aktualisierenden tahl anzuzeigen lassen.
Delphi-Quellcode:
  var
  Form: TForm;
  nOldIdleTime: Int64 = 0;
  nOldSystemTime : INT64 = 0;
  nNewCPUTime : ULONG = 0;

const
  SYS_BASIC_INFO = 0;
  SYS_PERFORMANCE_INFO = 2;
  SYS_TIME_INFO = 3;

type
  SYSTEM_BASIC_INFORMATION = packed record
    dwUnknown1 : DWORD;
    uKeMaximumIncrement : ULONG;
    uPageSize : ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage : ULONG;
    uMmHighestPhysicalPage : ULONG;
    uAllocationGranularity : ULONG;
    pLowestUserAddress : POINTER;
    pMmHighestUserAddress : POINTER;
    uKeActiveProcessors : POINTER;
    bKeNumberProcessors : BYTE;
    bUnknown2 : BYTE;
    wUnknown3 : WORD;
  end;

  SYSTEM_PERFORMANCE_INFORMATION = packed record
    nIdleTime : INT64;
    dwSpare : array[0..75]of DWORD;
  end;

  SYSTEM_TIME_INFORMATION = packed record
    nKeBootTime : INT64;
    nKeSystemTime : INT64;
    nExpTimeZoneBias : INT64;
    uCurrentTimeZoneId : ULONG;
    dwReserved : DWORD;
  end;

  function NTQuerySystemInformation(SystemInformationClass: Longint;
                                    SystemInformation: Pointer;
                                    SystemInformationLength: Longint;
                                    ReturnLength: Longint): Longint; stdcall;
                                    external 'ntdll.dllname 'NtQuerySystemInformation';




function GetCPUUsage: Integer;
var
  spi : SYSTEM_PERFORMANCE_INFORMATION;
  sti : SYSTEM_TIME_INFORMATION;
  sbi : SYSTEM_BASIC_INFORMATION;
begin
  result := 0;
  if (NTQuerySystemInformation(SYS_BASIC_INFO, @sbi, sizeof(SYSTEM_BASIC_INFORMATION), 0) = NO_ERROR) then
  begin
    if (NTQuerySystemInformation(SYS_TIME_INFO, @sti, sizeof(SYSTEM_TIME_INFORMATION), 0) = NO_ERROR) then
    if (NTQuerySystemInformation(SYS_PERFORMANCE_INFO, @spi, sizeof(SYSTEM_PERFORMANCE_INFORMATION), 0)= NO_ERROR) then
    begin
      if (nOldIdleTime <> 0) then
      begin
        nNewCPUTime:= trunc(100-((spi.nIdleTime-nOldIdleTime)/(sti.nKeSystemTime-nOldSystemTime)*100)/sbi.bKeNumberProcessors+0.5);
        if (nNewCPUTime <> nOldIdleTime) then
        begin
          Result := nNewCPUTIME;
        end;
      end;
      nOldIdleTime := spi.nIdleTime;
      nOldSystemTime := sti.nKeSystemTime;
    end;
  end;
end;


 procedure TWin2kAppForm.FormClick(Sender: TObject);
begin
  Label19.Caption := IntToStr(GetCPUUsage());
end;

procedure TWin2kAppForm.Button11Click(Sender: TObject);
begin
  Label19.Caption := IntToStr(GetCPUUsage());

end;
Was ist die Procedure(Quellcode) um mit dem oben genannten quelltext die CPU Auslastung auch in einer ProggressBar anzuzeigen.(TProgressBar)?
patrick
Am 08.05.2006 gestartet mit Delphi
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 00:06
Progressbar1.Position := GetCpuUsage; wenn das in % ist vileicht musst du noch round einsetzen

und

Progressbar1.Position := round((GetCpuUsage/Gesamt) * 100); wobei du die geamtmenge ausrechnen musst.
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 00:31
hm ein kleines problem habe ich noch

lasse ich es ohne round laufen gehts aber ich kriege ne fehlermeldung im betrieb(popup fenster)
" Ungültige Gleitkommaoperation"

setzte ich das round habe ich ne Fehlermeldung im Quellcode
Progressbar2.Position := round((GetCpuUsage/Gesamt) * 100); Denke mein Delphi kennt "Gesamt" nicht.
E2003 Undefinierter Bezeicher: "Gesamt"

Aber danke für die restliche Info, wenigstens sehe ich die proggressbar mal im einsatz
patrick
Am 08.05.2006 gestartet mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 00:55
Hi

Bei mir geht es so ohne Probleme:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ProgressBar1.Position := GetCPUUsage;
end;
Es muss natürlich nicht in einer Timer-Prozedur sein. ProgressBar-Min muss auf 0 stehen und -Max auf 100, was jedoch Standard-EInstellung ist. Runden musst du nichts, da GetCPIUsage einen Integer zurückliefert.
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 01:45
jo mit deiner variante funktioniert die anzeige in der Progressbar allerdings wird es nicht mehr als zahl angezeigt,wobei mir das eigentlich egal ist habe es endlich in der progressbar

danke an alle
patrick
Am 08.05.2006 gestartet mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 01:55
Wenn du anstelle der ProgressBar eine TGauge (Register: Beispiele) nimmst, zeigt es dir darauf auch die Zahl an. Natürlich kannst du diese auch in einem Label o.Ä. anzeigen lassen.

Bsp. zu TGauge:

Gauge1.Progress := GetCPUUsage;
Edit: Bei TGauge kannst du auch frei die Vordergrund-/Hintergrundfarben wählen, nur so nebenbei, falls du das benötigen solltest.
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 03:09
Ich denke ich lasse es mal so wie ich es jetzt habe, änderungen vorbehalten

Falls jemand Lust hat mein proggi zu testen

Wäre froh wenn ihr mir fehler meldet und evtl wie ich die lösen könnte.

Mfg

http://img115.imageshack.us/img115/2...sion9wx.th.png

http://img158.imageshack.us/img158/3...orii5rk.th.png
Angehängte Dateien
Dateityp: pas w2kmain_145.pas (22,2 KB, 15x aufgerufen)
Dateityp: exe systemorganisatortestversion_188.exe (520,0 KB, 23x aufgerufen)
patrick
Am 08.05.2006 gestartet mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#8

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 16:08
Hallo,

mach dazu doch ein Thema unter "Freeware" bzw. "Open-Source" auf, da finden sich sicher mehr Tester.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#9

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 18:40
Hallo, hab ein paar Fehler entdeckt, die du vielleicht beheben kannst:

1) deine Divisionen sind ziemlich ungenau bzw. warscheinlich gerundet...
2) bleibt das Programm bei mir hängen, wenn ich auch PCName klicke
3) geht bei CD Fach auf/zu jeweils nur der Master und nicht der Slave auf
4) warum lässt du den Arbeitsspeicher nicht gleich von Anfang an anzeigen?
5) wird bei meinem am Strom angeschlossenem PC der Ladestatus -1 angezeigt

Viel Spass und mach weiter so

[edit] Außerdem solltest du lieber (Matze) eine TGauge nehmen, denn dort kannst du die Farbe einstellen. Der Kontrast der ProgressBar zu dem schwarzen Hintergrund ist sehr schlecht... [/edit]
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Wie kann ich die CPU auslastung in einer ProgressBar anz

  Alt 13. Mai 2006, 20:19
hm das ich kleine fehler habe weiss ich, da dies erst mein 2. projekt in delphi ist bin ich noch etwas unerfahren.

naja ich werde versuchen die probleme zu beheben(es ist ja erst ne testversion)

@fLaSh11 zu deinen aussagen bräuchte ich noch etwas erklärungen/ausführungen.

1) deine Divisionen sind ziemlich ungenau bzw. warscheinlich gerundet...
Hm was verstehst du unter divisionen?

2) bleibt das Programm bei mir hängen, wenn ich auch PCName klicke
[color=#005fff]hm das habe ich bei mir nicht. weisst du an was es liegen könnte?

3) geht bei CD Fach auf/zu jeweils nur der Master und nicht der Slave auf
ähm Master/Sklave? ich habe ein laufwerk und da funktioniert es einwandfrei

4) warum lässt du den Arbeitsspeicher nicht gleich von Anfang an anzeigen?
Du meinst automatisch/wie die CPU auslastung?

5) wird bei meinem am Strom angeschlossenem PC der Ladestatus -1 angezeigt Very Happy
LOL habe das gleiche problem ich habe aber den fehler im quellcode noch nicht rausgefunden
patrick
Am 08.05.2006 gestartet mit Delphi
  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:06 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