Avatar billede elster Nybegynder
25. maj 2001 - 13:45 Der er 5 kommentarer og
1 løsning

Hent CPU usage

Er der en måde hvorpå man via Win32 API\'et kan finde ud af hvor meget af cpu\'en der er i brug (vha. KERNEL32.DLL eller lignende)?

Ligesom man f.eks. kan hente antallet af cpu\'er med SYSTEM_INFO struct\'en.


Avatar billede nebula Nybegynder
28. maj 2001 - 02:01 #1
Uhm, Jeg ved at man under NT/2000 kan via performance counterne, finde frem til bl.a. cpu usage.

Jeg har fundet frem til et eksempel på MSDN der giver lidt info omkring cache og cpu tid:
http://support.microsoft.com/support/kb/articles/Q287/1/58.ASP
Avatar billede borrisholt Novice
28. maj 2001 - 08:09 #2
elster Hvilken C++ Compiler bruger du ?

Jens B
Avatar billede elster Nybegynder
30. maj 2001 - 19:38 #3
Problemet er at jeg er ved at lave et COM objekt der skal benyttes fra ASP, og vise forskellige oplysninger om serverens CPU, memory osv (så man kan se dette ved blot at gå ind på en ASP side).

Komponentet laver jeg i Visual J++ (Microsoft\'s java), så det har ikke så meget med C++ at gøre. Men jeg kunne ikke finde en bedre kategori for dette spørgsmål.

Jeg laver det i J++ af følgende to grunde:

1. Jeg har aldrig lavet et komponent i C++ før.
2. Ved hjælp af Microsoft\'s J/Direct har man adgang til alle Win32 DLL\'er (som kernel32.dll, user32.dll osv.)

Komponentet skal desuden heller ikke være noget performance \"monster\", så Java er tilstrækkeligt.

Jeg fandt ud af at man hente CPU usage under Win95/98 i registrerings databasen ved at læse værdien af følgende nøgle:
HKEY_DYN_DATA\\PerfStats\\StatData\\KERNEL\\CPUUsage

Men denne nøgle eksistere ikke under WinNT...

nebula >
Jeg kunne ikke finde performance counter - funktionerne som du nævnte i de Win32 dll\'er J/Direct importere som default. Kender du evt. navnet på den dll der indeholder disse funktioner?

Jeg fandt funktionerne \"GetProcessTimes\" og \"GetThreadTimes\" i kernel32.dll. Jeg læste et sted at disse vidst nok kunne bruges til at udregne cpu usage. Men hvordan stod der ikke. Så vidt jeg kan se giver disse kun information om en enkelt process, eller hvad?

Avatar billede nebula Nybegynder
30. maj 2001 - 22:28 #4
GetProcessTimes - giver dig timing information om en angiven process.

GetThreadTimes - giver dig timing information om en given tråd.

Så nej, de kan ikke bruges - med mindre man kan få information om f.eks. idle processen og modregne det ...uhm, jeg vil nu helst holde mig fra det.

dll\'en der indeholder funktioner benyttet af det eksempel jeg henviste til hedder \"pdh.dll\" (Performance Data Helper).

Under NT gælder forresten: \"The performance data is accessed through the registry key HKEY_PEFORMANCE_DATA\" videre følger: \"To obtain performance data from the local system, use the RegQueryValueEx function, with the HKEY_PERFORMANCE_DATA key\".
Avatar billede borrisholt Novice
31. maj 2001 - 07:30 #5
elster >> J++ kan jeg ikke hjælpe dig i. Men hvis du brugte enten Delphi eller C++ Builder fra Broland så havde jeg næsten en løsning på lager ....

Jens B
Avatar billede elster Nybegynder
31. maj 2001 - 13:25 #6
Tak, jeg prøver først \"pdh.dll\". Kan jeg ikke få dette til at virke, bliver jeg nok nødt til at sætte mig lidt ind i nøglerne under HKEY_PERFORMANCE_DATA. Men jeg tror at en af disse må være den rigtige løsning på problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester