How to Retrieve CPU Usage in C++

CPU usageis essentially the CPU resources consumed by the programs you are running, indicating the status of your machine’s running programs at a certain point in time. A higher usageindicates that your machine is running many programs at that time, while a lower usage indicates fewer programs. In the previous article, we discussed how to obtain memory usage in C++. In this article, we will retrieve CPU usage using C++. Without further ado, let’s jump straight to the code:

CPUInfo.h:

#pragma once
#include <stdint.h>
namespace xm{ class CPUInfo final { public: float CalculateCPULoad(); private: float CalculateCPULoad(uint64_t idleTicks, uint64_t totalTicks); private: uint64_t m_cpuPreviousTotalTicks = 0; uint64_t m_cpuPreviousIdleTicks = 0; };}

CPUInfo.cpp:

#include "CPUInfo.h"
#include <Windows.h>
namespace xm{ uint64_t FileTimeToInt64(const FILETIME &ft) { return (((unsigned long long)(ft.dwHighDateTime)) << 32) | ((unsigned long long)ft.dwLowDateTime); }
 float CPUInfo::CalculateCPULoad() { FILETIME idleTime, kernelTime, userTime; return GetSystemTimes(&idleTime, &kernelTime, &userTime) ? CalculateCPULoad(FileTimeToInt64(idleTime), FileTimeToInt64(kernelTime) + FileTimeToInt64(userTime)) : -100.0f; }
 float CPUInfo::CalculateCPULoad(uint64_t p_idleTicks, uint64_t p_totalTicks) { uint64_t totalTicksSinceLastTime = p_totalTicks - m_cpuPreviousTotalTicks; uint64_t idleTicksSinceLastTime = p_idleTicks - m_cpuPreviousIdleTicks;
 float ret = 1.0f - ((totalTicksSinceLastTime > 0) ? ((float)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0);
 m_cpuPreviousTotalTicks = p_totalTicks; m_cpuPreviousIdleTicks = p_idleTicks;
 return ret * 100.0f; }}

Test Code main.cpp:

#include "CPUInfo.h"
#include <iostream>
int main() { xm::CPUInfo cpuInfo; std::cout << "CPU Usage: "  << cpuInfo.CalculateCPULoad() << "%" << std::endl;
 return 0; }

The output is as follows:

How to Retrieve CPU Usage in C++

Leave a Comment