![]() |
Wie kann ich die CPU auslastung in einer ProgressBar anzeige
Moin
Ich habe die Boardsuche und Google verwendet aber leider , nicht die gewünschte antwort zu meinem problem gefunden.:gruebel: Ich verwende diesen quelltext um die CPU Auslastung in einer sich laufend aktualisierenden tahl anzuzeigen lassen.
Delphi-Quellcode:
Was ist die Procedure(Quellcode) um mit dem oben genannten quelltext die CPU Auslastung auch in einer ProggressBar anzuzeigen.(TProgressBar)? :coder2: :coder2:
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.dll' name '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; |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
Delphi-Quellcode:
wenn das in % ist vileicht musst du noch round einsetzen
Progressbar1.Position := GetCpuUsage;
und
Delphi-Quellcode:
wobei du die geamtmenge ausrechnen musst.
Progressbar1.Position := round((GetCpuUsage/Gesamt) * 100);
|
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
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
Delphi-Quellcode:
Denke mein Delphi kennt "Gesamt" nicht.
Progressbar2.Position := round((GetCpuUsage/Gesamt) * 100);
E2003 Undefinierter Bezeicher: "Gesamt" Aber danke für die restliche Info, wenigstens sehe ich die proggressbar mal im einsatz |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
Hi
Bei mir geht es so ohne Probleme:
Delphi-Quellcode:
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.
procedure TForm1.Timer1Timer(Sender: TObject);
begin ProgressBar1.Position := GetCPUUsage; end; |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
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 |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
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:
Delphi-Quellcode:
Gauge1.Progress := GetCPUUsage;
Edit: Bei TGauge kannst du auch frei die Vordergrund-/Hintergrundfarben wählen, nur so nebenbei, falls du das benötigen solltest. |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
Liste der Anhänge anzeigen (Anzahl: 2)
Ich denke ich lasse es mal so wie ich es jetzt habe, änderungen vorbehalten :mrgreen:
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. :zwinker: Mfg ![]() ![]() ![]() ![]() |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
Hallo,
mach dazu doch ein Thema unter "Freeware" bzw. "Open-Source" auf, da finden sich sicher mehr Tester. Gruß, ManuMF |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
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 :-D 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] |
Re: Wie kann ich die CPU auslastung in einer ProgressBar anz
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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