C++ Windows 获取CPU利用率【转】

原文:http://blog.csdn.net/maoxing63570/article/details/6919599

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
#define COUNT_INTERVAL 1000
const TCHAR *pszPathBuff=_T("\\Processor(_Total)\\% Processor Time");
//% Processor Time 指处理器用来执行非闲置线程时间的百分比。
//计算方法是,测量范例间隔内非闲置线程活动的时间,用范例间隔减去该值。
//(每台处理器有一个闲置线程,该线程在没有其他线程可以运行时消耗周期)。
//这个计数器是处理器活动的主要说明器,显示在范例间隔时所观察的繁忙时间平均百分比。
//这个值是用 100% 减去该服务不活动的时间计算出来的。

int main()
{
    HQUERY          hQuery;
    HCOUNTER        hCounter;
    PDH_STATUS      pdhStatus;
    PDH_FMT_COUNTERVALUE   fmtValue;
    DWORD           ctrType;
    SYSTEMTIME      stSampleTime;
    
    __try
    {
        pdhStatus = PdhOpenQuery(NULL, NULL, &hQuery);
        if (ERROR_SUCCESS != pdhStatus)
        {
            _tprintf(TEXT("PdhOpenQuery failed with %ld.\n"), pdhStatus);
            __leave;
        }
        
        pdhStatus = PdhAddCounter (hQuery,
            pszPathBuff, 
            0, 
            &hCounter);
        if (ERROR_SUCCESS != pdhStatus)
        {
            _tprintf(TEXT("PdhBrowseCounters failed with 0x%x.\n"), pdhStatus);
            __leave;
        }
        
        pdhStatus = PdhCollectQueryData (hQuery);
        if (ERROR_SUCCESS != pdhStatus)
        {
            _tprintf(TEXT("PdhCollectQueryData failed with 0x%x.\n"), pdhStatus);
            __leave;
        }
        
        while (!_kbhit()) 
        {
            
            Sleep(COUNT_INTERVAL);
            GetLocalTime (&stSampleTime);
            pdhStatus = PdhCollectQueryData (hQuery);
            _tprintf (
                TEXT("\n\"%2.2d/%2.2d/%4.4d %2.2d:%2.2d:%2.2d.%3.3d\""),
                stSampleTime.wMonth, 
                stSampleTime.wDay, 
                stSampleTime.wYear,
                stSampleTime.wHour, 
                stSampleTime.wMinute, 
                stSampleTime.wSecond,
                stSampleTime.wMilliseconds);
            
            pdhStatus = PdhGetFormattedCounterValue (hCounter,
                PDH_FMT_DOUBLE,
                &ctrType,
                &fmtValue);
            
            if (pdhStatus == ERROR_SUCCESS)
            {
                _tprintf (TEXT(",\"%.20g\""), fmtValue.doubleValue);
            }
            else
            {
                _tprintf(TEXT("\nPdhGetFormattedCounterValue failed with 0x%x.\n"), pdhStatus);
                __leave;
            }
        }
    }
    __finally
    {
        if (hQuery)
            PdhCloseQuery (hQuery);
    }
    
    
    return pdhStatus;
}

 

转载于:https://www.cnblogs.com/Leo-Forest/archive/2013/04/24/3040341.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值