SYSTEM_BASIC_INFORMATION sysinfo;
ULONG ReturnLength;
NTSTATUS (WINAPI *pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
HMODULE hModule=LoadLibrary("Ntdll.dll");
pNtQuerySystemInformation = (NTSTATUS (WINAPI*)(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG))GetProcAddress(hModule,"NtQuerySystemInformation");
if(pNtQuerySystemInformation==NULL) abort();
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION PerfomanceData[2];// = new SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION[m_processor_count];
ULONG ReturnSize;
(pNtQuerySystemInformation)(SystemProcessorPerformanceInformation, PerfomanceData, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)*m_processor_count, &ReturnSize);
__int64 sum = (__int64(PerfomanceData[a_ProcessorNum].KernelTime.QuadPart) + __int64(PerfomanceData[a_ProcessorNum].IdleTime.QuadPart));
__int64 del = (__int64(PerfomanceData[a_ProcessorNum].UserTime.QuadPart));
__int64 PercentUsage = sum / del;
return int(PercentUsage);
Как определить загрузку процессора
пользуюсь функцией NtQuerySystemInformation. она в структуре SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION выдает IdleTime; KernelTime; UserTime; каким образом на основе этих данных посчитать загрузку процессора?
попробовал разные комбинации, результат не правдоподобный получается.
Код:
http://sources.codenet.ru/download/677/cpu_usage.html
Рабочий исходник(Delphi)
Рабочий исходник(Delphi)