Entwickler-Ecke
Sonstiges (Delphi) - CPU-Auslastung (Win9x ACPI Problem)
RFZ - Mi 07.01.04 11:21
Titel: CPU-Auslastung (Win9x ACPI Problem)
Moin,
ich würd gern unter Win9x die CPU-Auslastung messen. Dabei gibt es leider ein Problem:
Wenn Win9x im ACPI Modus installiert ist, zeigt der Systemmonitor eine falsche auslastung (Microsoft Knowledge Base
Q227131 [
http://support.microsoft.com/default.aspx?scid=kb;en-us;227131]).
Erkennen kann man die falsche Auslastung daran, dass sie meisst über 20% liegt (manchmal immer 100%) und v.a. stark fällt wenn man die Maus bewegt.
Dieses Problem hab ich mit Delphi auch, wenn ich z.B. AdCpuUsage nutze, oder die Daten aus der Registry (geht eh nur bei 9x) lese.
Das Shareware Tool "
CPU Indicator [
http://www.pysoft.com/]" zeigt z.B. die richtige Auslastung.
Kennt jemand von euch noch Komponenten die ich versuchen kann?
cu RFZ
RFZ - Do 08.01.04 18:16
Sorry, das selbe Problem.... in Ruhe 30%, bei Mausbewegung 1%...
cu RFZ
mica - Mo 02.02.04 13:34
Titel: CPU-Auslastung
Hallo erstmal,
Genau, das versuche ich auch.
Ich versuche die CPU-Auslastung grafisch darzustellen.
Kannst du mir verraten wie das geht, falls du das Problem schon lösen konntest.
Ich benutze XP-Home
Bin noch Anfänger in Delphi.
Gruß
Mica
Phantom1 - Mo 02.02.04 14:28
@mica: das graphisch anzuzeigen ist eigentlich kein problem, das problem mit win98 kann nicht probieren da ich kein win98 habe.
hier mal ein einfaches beispiel, du braucht ein image und ein timer auf dem formular:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, adcpuusage;
type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private CPULast: Array[0..80] Of Byte; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Image1.Width:=400; Image1.Height:=100; end;
procedure TForm1.Timer1Timer(Sender: TObject); Var i: Integer; begin CollectCPUData; For i:=79 DownTo 0 Do CPULast[i+1]:=CPULast[i]; CPULast[0]:=Round(GetCPUUsage(0)*100);
Image1.Picture.Bitmap:=Nil; With Image1, Canvas Do Begin MoveTo(0,Pred(Height)-CPULast[0]); For i:=1 To 80 Do LineTo(i*5,Pred(Height)-CPULast[i]); End; end;
end. |
Delete - Mo 02.02.04 14:38
Unter Win98 kann man die CPU Auslastung nicht korrekt auslesen. Das gibt das OS einfach nicht her.
RFZ - Mo 02.02.04 14:56
@Luckie
Ich hab doch ein Tool gepostet welches es kann, also muss es auch irgendwie machbar sein ;)
cu RFZ
Delete - Mo 02.02.04 15:03
wer weiß, was das Tool macht. oder gibt es den Source dazu? Man kann es eventuell irgendwie ungefähr errechnen. Fakt ist aber, dass ConsumerWindows keine direkte Möglichkeit bietet sie direkt zu ermitteln mittels einer API.
RFZ - Mo 02.02.04 15:10
leider hab ich zu dem tool absolut keine Info gefunden... Muss ja nicht mit API sein, kann ja auch irgendwie anders funktionieren...
mica - Mo 02.02.04 15:36
@phantom1
Das sieht ja gar nicht mal so schwer aus.
Das versuche ich mal, wenn ich heut nach Hus komm.
Ansonsten, melde ich mich nocheinmal.
Danke und Gruß
Mica
Delete - Mo 02.02.04 19:53
RFZ hat folgendes geschrieben: |
leider hab ich zu dem tool absolut keine Info gefunden... Muss ja nicht mit API sein, kann ja auch irgendwie anders funktionieren... |
Was gbt es anderes als die API bei Windows? :roll:
RFZ - Mo 02.02.04 20:24
ich hab keine ahnung ;) aber irgendwas muss es ja geben ....
mica - Mo 02.02.04 20:30
@phantom1
:cry:
Hab versucht deinen Quelltext zum laufen zu bringen.
1.) einen timer und ein Image aufs Formular pgepflanzt
2.)Den gesamten Quellcode von dir über meinen Quellcode kopiert
3.)F9
Das compilieren stoppt mit :
-[Fehler] Unit1.pas(36): Undefinierter Bezeichner: 'CollectCPUData'
-[Fehler] Unit1.pas(38): Undefinierter Bezeichner: 'CPULast'
-[Fehler] Unit1.pas(39): Undefinierter Bezeichner: 'GetCPUUsage'
-...
Was mache ich falsch?(Ich benutze Delphi 5)
Gruß
Mica
Phantom1 - Mo 02.02.04 20:33
@mica: hast du die unit adcpuusage in das verzeichniss von der anwendung kopiert?
mica - Mo 02.02.04 21:32
@phantom1
hmm...verstehe ich nicht.
adcpuusage unit ist doch der Quelltext, mit dem du mir geantwortet hast,oder?
ich habe einfach eine neue Anwendung gestartet und dein Quelltext in meine Unit1.pas kopiert.
Davor habe ich natürlich den timer und das image auf Form1 getan.
Hilfe!!!
Gruß
Mica
Phantom1 - Di 03.02.04 00:52
moment, ich seh grad das war ja ein anderer topic von dir, dort hatte ich eine seite gepostet mit einer Unit für die CPU-Last messung und die brauchst du
http://tinyurl.com/77j2
diese adcpuusage.pas einfach in deine anwendung kopieren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!