Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

1

18.02.2012, 14:53

Cpu Ussage abfragen mit PdhAddCounter.

Hallo zusammen,

ich bin gerade dabei die CPU Ussage auszulesen, komme aber nicht sehr weit, weil PdhAddCounter einen Fehler zurück gibt und
somit dann meine Anzeige auf 0 stehen bleibt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Cpu::init(){
    PDH_STATUS pdh;
    canReadCPU = true;
    //Query Object to poll Cpu usage
    pdh = PdhOpenQuery(NULL,0,&queryHandle);

    if(pdh != ERROR_SUCCESS){
        canReadCPU = false;
    }

    //Query all CPUs
    pdh = PdhAddCounter(queryHandle, TEXT("\\Processor(_Total)\\% processor time"), 0, &counterHandle);
    
    if(pdh != ERROR_SUCCESS){
        canReadCPU = false;
    }

    lastSampleTime = (unsigned long)timer->getCurrentTime(); 

    cpuUssage = 0;

}



Nach dem Aufruf ist canReadCPU == false

Gibt es vielleicht noch eine andere Möglichkeit? :search:

Gruß

Fb

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

18.02.2012, 20:54

Was genau willst Du denn überhaupt auslesen? "Die CPU" ist nicht gerade detailliert.
Außerdem wäre doch der konkrete Fehler-Code mal interessant.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (18.02.2012, 21:00)


Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

3

21.02.2012, 21:42

Hallo BlueCobold,

sorry dass ich mich jetzt erst melde.

Also ich habe vor mir eine CPU % Anzeige zu implementieren (so wie der Tacho von Win7).

In diesem Fall ist pdh == 0 und die Welt ist in Ordung.

C-/C++-Quelltext

1
pdh = PdhOpenQuery(NULL,0,&queryHandle);


Hier wird pdh jedoch mit -1073738824 initialisiert und ich lande dann in der folgenden if Anweisung.

C-/C++-Quelltext

1
2
3
4
5
6
...
pdh = PdhAddCounter(queryHandle, TEXT("\\Processor(_Total)\\% processor time"), 0, &counterHandle);
...
if(pdh != ERROR_SUCCESS){
        canReadCPU = false;
    }


Klein Plan was da nicht OK ist oder muss man das bei Win7 anders machen?

Schöne Grüße

Fb

Was genau willst Du denn überhaupt auslesen? "Die CPU" ist nicht gerade detailliert.
Außerdem wäre doch der konkrete Fehler-Code mal interessant.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

22.02.2012, 06:57

Folglich also Fehlercode C0000BB8=PDH_CSTATUS_NO_OBJECT:
“The specified machine was found, but no matching performance object was found on that machine.”

Entweder das:
http://support.microsoft.com/kb/867771/en-us
oder Dein Treiber bietet das nicht oder baut irgendwelchen Quatsch. Die PHD.dll ist da? Welchen Weg es da noch gibt weiß ich nicht so genau.

Die Sidebar-Gadgets machen das übrigens ganz anders wie es scheint. Leider ist das in JavaScript in einem Package gekapselt und ich weiß nicht, welche Funktion Windows da intern abruft.

Was zeigt denn Dein PerfMon an?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

22.02.2012, 19:32

Also der perfmon sagt, dass der Virenkiller nicht registriert ist, aber das kann es doch nicht sein. Bei der CPU bringt er keine Fehler, sonst ist auch alles OK.

Hab das jetzt auch schon mit 2 unterschiedlichen Rechnern ausprobiert. Einmal mit nem i5 und nem i7 bei beiden erhalte ich Müll.

Die pdh.dll finde ich in meiner System32.

Kein Plan wo ran das liegen könnte. Ich werde mal am Wochenende ne google Session starten, vielleicht finde ich was.

Gruß

fb

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

6

22.02.2012, 20:20

Ich habe folgendes gefunden.

http://patuxentpc.com/?p=16

Hier wird über GetSystemTimes und GetCurrentProcess die CPU Belastung ausgerechnet. Das Programm gibt da auch nach Ablaub der Schleife einen Wert zurück.
Aber ich kann mir nicht vorstellen, dass das so optimal ist.

Gruß
fb

Werbeanzeige