如何在C ++中从Windows检索系统总CPU使用率?

时间:2017-04-11 23:00:58

标签: c++ windows operating-system cpu-usage msdn

我需要动态检索总CPU使用率,以便反馈系统根据CPU是否受到限制来更改行为。为此,我调查了NtQuerySystemInformation sys调用,该调用在任何给定时间提供系统信息,但似乎这个函数在最新版本的Windows中已被弃用,因为MSDN页面说明了

  

[NtQuerySystemInformation将来可能会被更改或不可用   Windows版本。应用程序应使用备用功能   本主题中列出的内容。]

参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724509(v=vs.85).aspx

有谁知道支持此呼叫的操作系统版本?赢7/8 / 8.1 / 10?有没有其他方法可以直接检索总CPU使用率?

1 个答案:

答案 0 :(得分:1)

官方说,MSDN中有两个功能。

  1. GetSystemTimes():它看起来更容易,但很久以前发布了。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms724400(v=vs.85).aspx

  2. 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;
     } 
    
  3. 祝你好运!

    在我看来,Windows命令“tasklist / v”将显示操作系统的CPU TIME和MEMORY,您可以通过'system'或其他功能调用命令。

    PS。我仍然认为查看操作系统端是监控CPU使用率的最佳方法。 (如果我使用该函数,它也将在内部执行相同的操作。)