Здравствуйте, пытаюсь разбираться с WIN32 API, реши написать что-то на подобии диспетчера задач, но никак не могу понять как узнать нагруженность CPU и его температуру(если это возможно)... Понял как узнать архитектуру процессора :
LPCSTR getArchitecture()
{
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
LPCSTR architecture;
switch (sysInfo.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_INTEL :
architecture = "Intel x86";
break;
case PROCESSOR_ARCHITECTURE_IA64 :
architecture = "Intel x64";
break;
case PROCESSOR_ARCHITECTURE_AMD64 :
architecture = "AMD x64";
break;
case PROCESSOR_AMD_X8664:
architecture = "AMD x86";
break;
default:
architecture = "Unknow";
break;
}
return architecture;
}
Также понял, как узнать количество ядер процессора:
UINT const getCountCernels()
{
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
return sysInfo.dwNumberOfProcessors;
}
Хотелось бы получить внятный ответ как можно узнать нагруженность процессора желательно для каждого ядра...
Через PDH-функции, в общих чертах, загрузка ядра добывается так:
"\\Processor(0)\\%% Idle Time", где 0 - номер ядраТемпературу процессора вряд ли получится узнать без проблем, можно сделать WMI запрос по MSAcpi_ThermalZoneTemperature, но это даст только температуру где - то на материнской плате (это может быть далеко от процессора), и то, этого может не быть в материнке вообще. Правильным решением будет писать драйвера. Для этого нужно с помощью инструкции rdmsr получить IA32_THERM_STATUS, если мы говорим о 32 - bit Intel Architecture, для этого надо будет получить доступ в kernel space (ring 0 права)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей