![]() |
CPU-Auslastung anzeigen (zum 1000000000000. Mal)
Guden, wie komme ich denn nun an den prozentualen Wert der momentanen
CPU-Auslastung dran ??? |
Re: CPU-Auslastung anzeigen (zum 1000000000000. Mal)
Hier habe ich das angewendet (läuft nur unter Win NT/2000/XP):
![]() Der Code dazu: ![]() |
Re: CPU-Auslastung anzeigen (zum 1000000000000. Mal)
Ich habe eure Beiträge genossen und habe versucht das in c++ unter c++builder umzuschreiben. Es ist gut gelungen. Kann es sein, dass die Speicherauslastung (bei 4kb) ständig inkrementiert wird, wenn ein Timer verwendet wird, der die Methode X nach einem gegeben Intervall (1.Sek)aufruft, die diese GetCPUUsage verwendet? -
Diese Beobachtung habe ich mittels Task-Manager festgestellt. Vielleicht liege ich falsch - ich kann diese Feststellung noch nicht genau bestätigen. Wenn jemand von euch c++ versteht, guckt mal rein, ob irgend etwas faul mit diesen Code ist. Danke im Voraus! Harp
Code:
[edit=Luckie]Code-Tags Mfg, Luckie[/edit]
//...header
#define SystemBasicInformation 0 #define SystemPerformanceInformation 2 #define SystemTimeInformation 3 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart)) typedef struct { DWORD dwUnknown1; ULONG uKeMaximumIncrement; ULONG uPageSize; ULONG uMmNumberOfPhysicalPages; ULONG uMmLowestPhysicalPage; ULONG uMmHighestPhysicalPage; ULONG uAllocationGranularity; PVOID pLowestUserAddress; PVOID pMmHighestUserAddress; ULONG uKeActiveProcessors; BYTE bKeNumberProcessors; BYTE bUnknown2; WORD wUnknown3; } SYSTEM_BASIC_INFORMATION; typedef struct { LARGE_INTEGER liIdleTime; DWORD dwSpare[76]; } SYSTEM_PERFORMANCE_INFORMATION; typedef struct { LARGE_INTEGER liKeBootTime; LARGE_INTEGER liKeSystemTime; LARGE_INTEGER liExpTimeZoneBias; ULONG uCurrentTimeZoneId; DWORD dwReserved; } SYSTEM_TIME_INFORMATION; typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); PROCNTQSI NtQuerySystemInformation; //GetCPUUsage() gives the information about the system //it is called and used by another class double GetCPUUsage() { SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; SYSTEM_TIME_INFORMATION SysTimeInfo; SYSTEM_BASIC_INFORMATION SysBaseInfo; double dbIdleTime; double dbSystemTime; static LARGE_INTEGER liOldIdleTime = {0,0}; static LARGE_INTEGER liOldSystemTime = {0,0}; NtQuerySystemInformation = (PROCNTQSI)GetProcAddress( GetModuleHandle("ntdll"), "NtQuerySystemInformation"); NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseI nfo),NULL); NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeIn fo),0); NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(Sy sPerfInfo),NULL); if (liOldIdleTime.QuadPart != 0) { // if it's a first call - skip it // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); // CurrentCpuIdle = IdleTime / SystemTime dbIdleTime = dbIdleTime / dbSystemTime; dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5; } liOldIdleTime = SysPerfInfo.liIdleTime; liOldSystemTime = SysTimeInfo.liKeSystemTime; return dbIdleTime; } //---------------------------------- |
Re: CPU-Auslastung anzeigen (zum 1000000000000. Mal)
ich glaube nicht, dass dieser Code ein Memory-Leak verursacht. Ich habe nämlich, den Code ausgeklammert - doch das Problem besteht immer noch...
Best regards, Harp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 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-2025 by Thomas Breitkreuz