如何在 C++ 中从 Windows 检索总系统 CPU 使用情况?
How to retrieve total system CPU usage from Windows in C++?
我需要即时检索总 CPU 使用情况,以便反馈系统根据 CPU 是否受到限制来更改行为。为此,我查看了 NtQuerySystemInformation
sys 调用,它在任何给定时间提供系统信息,但似乎此功能在最新版本的 Windows 中已被弃用,因为 MSDN 页面显示
[NtQuerySystemInformation may be altered or unavailable in future
versions of Windows. Applications should use the alternate functions
listed in this topic.]
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724509(v=vs.85).aspx
有谁知道此调用支持哪些 OS 版本?赢得 7/8/8.1/10?有没有其他方法可以直接检索总 CPU 使用量?
官方在MSDN上有两个函数。
GetSystemTimes(): 看起来更简单但是很久以前发布了。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724400(v=vs.85).aspx
GetSystemInfo() :我从 https://code.msdn.microsoft.com/windowsdesktop/Use-PerformanceCounter-to-272d57a1
获得了示例代码
DWORD GetProcessorCount()
{
SYSTEM_INFO sysinfo;
DWORD dwNumberOfProcessors;
GetSystemInfo(&sysinfo);
dwNumberOfProcessors = sysinfo.dwNumberOfProcessors;
return dwNumberOfProcessors;
}
vector<PCTSTR> GetValidCounterNames()
{
vector<PCTSTR> validCounterNames;
DWORD dwNumberOfProcessors = GetProcessorCount();
DWORD index;
vector<PCTSTR> vszProcessNames;
TCHAR * szCounterName;
validCounterNames.push_back(TEXT("\Processor(_Total)\% Processor Time"));
validCounterNames.push_back(TEXT("\Processor(_Total)\% Idle Time"));
// skip some codes
return validCounterNames;
}
祝你好运!
在我看来,Windows 命令 "tasklist /v " 将显示 OS 的 CPU TIME 和 MEMORY,您可以通过 'system' 调用命令或其他功能。
PS。我仍然认为查看 OS 方面是监控 CPU 使用情况的最佳方式。 (如果我使用这个函数,它也会在里面做同样的事情。)
我需要即时检索总 CPU 使用情况,以便反馈系统根据 CPU 是否受到限制来更改行为。为此,我查看了 NtQuerySystemInformation
sys 调用,它在任何给定时间提供系统信息,但似乎此功能在最新版本的 Windows 中已被弃用,因为 MSDN 页面显示
[NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.]
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724509(v=vs.85).aspx
有谁知道此调用支持哪些 OS 版本?赢得 7/8/8.1/10?有没有其他方法可以直接检索总 CPU 使用量?
官方在MSDN上有两个函数。
GetSystemTimes(): 看起来更简单但是很久以前发布了。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms724400(v=vs.85).aspx
GetSystemInfo() :我从 https://code.msdn.microsoft.com/windowsdesktop/Use-PerformanceCounter-to-272d57a1
获得了示例代码DWORD GetProcessorCount() { SYSTEM_INFO sysinfo; DWORD dwNumberOfProcessors; GetSystemInfo(&sysinfo); dwNumberOfProcessors = sysinfo.dwNumberOfProcessors; return dwNumberOfProcessors; } vector<PCTSTR> GetValidCounterNames() { vector<PCTSTR> validCounterNames; DWORD dwNumberOfProcessors = GetProcessorCount(); DWORD index; vector<PCTSTR> vszProcessNames; TCHAR * szCounterName; validCounterNames.push_back(TEXT("\Processor(_Total)\% Processor Time")); validCounterNames.push_back(TEXT("\Processor(_Total)\% Idle Time")); // skip some codes return validCounterNames; }
祝你好运!
在我看来,Windows 命令 "tasklist /v " 将显示 OS 的 CPU TIME 和 MEMORY,您可以通过 'system' 调用命令或其他功能。
PS。我仍然认为查看 OS 方面是监控 CPU 使用情况的最佳方式。 (如果我使用这个函数,它也会在里面做同样的事情。)