#include <Pdh.h>
#pragma comment(lib, "pdh.lib")
void InitStart(bool& res)
{
PDH_STATUS status = PdhOpenQuery(NULL, NULL, &cpuQuery);
if (status == ERROR_SUCCESS) {
status = PdhAddCounter(cpuQuery, L"\\Processor(_Total)\\% Processor Time", NULL, &cpuTotal);
if (status == ERROR_SUCCESS) {
status = PdhCollectQueryData(cpuQuery);
if (status == ERROR_SUCCESS) {
res = true;
}
}
}
}
double GetCurrentCpuValue()
{
double resValue = 0;
Sleep(100);
PDH_FMT_COUNTERVALUE counterVal;
PDH_STATUS status = PdhCollectQueryData(cpuQuery);
if (status == ERROR_SUCCESS) {
status = PdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal);
if (status == ERROR_SUCCESS) {
resValue = counterVal.doubleValue;
}
}
return resValue;
}
void GetStatusTool::CloseCPUQuery()
{
PdhRemoveCounter(cpuTotal);
PdhCloseQuery(cpuQuery);
}
std::string getCpuUsage() {
bool flag = false;
InitStart(flag);
//std::cout << flag << std::endl;
if (flag) {
double res = GetCurrentCpuValue();
//std::cout << res << std::endl;
std::ostringstream oss;
if (res < 1) {
oss.precision(1);
}
else if (res < 10) {
oss.precision(2);
}
else {
oss.precision(3);
}
oss << res;
std::string rateStr(oss.str());
return rateStr;
CloseCPUQuery();
}
return "0";
}
通过pch.h获取,获取结果取自性能监视器, 与任务管理器显示的有差距。