通过 GetSystemTimes获取CPU占用率

__int64 CompareFileTime(FILETIME time1, FILETIME time2)
{
    __int64 time1 = time1.dwHighDateTime << 32 | time1.dwLowDateTime ;
    __int64 time2 = time2.dwHighDateTime << 32 | time2.dwLowDateTime ;
    return (time2 - time1);
}

 void MonitorCPUusageThread()
{
    int nCPUPercentage = 0;
    FILETIME idleTime;
    FILETIME kernelTime;
    FILETIME userTime;
    FILETIME pre_idleTime;
    FILETIME pre_kernelTime;
    FILETIME pre_userTime;

    bool res;
    res = GetSystemTimes(&idleTime, &kernelTime, &userTime);    
    pre_idleTime = idleTime;
    pre_kernelTime = kernelTime;
    pre_userTime = userTime;
    HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

    int nLastRate = 0;
    int nMaxRateCount = 0;

    while (true)
    {
        WaitForSingleObject( hEvent,1000 );
        res = GetSystemTimes(&idleTime, &kernelTime, &userTime );

        __int64 idle = CompareFileTime(pre_idleTime, idleTime);
        __int64 kernel = CompareFileTime(pre_kernelTime, kernelTime);
        __int64 user = CompareFileTime(pre_userTime, userTime);

        int cpu_occupancy_rate = (kernel + user - idle) * 100 / (kernel + user);
        //(总的时间 - 空闲时间)/ 总的时间 = 占用CPU时间的比率,即占用率
        int cpu_idle_rate = idle * 100 / (kernel + user);
        //空闲时间 / 总的时间 = 闲置CPU时间的比率,即闲置率 
        int cpu_kernel_rate = kernel * 100 / (kernel + user);
        //核心态时间 / 总的时间 = 核心态占用的比率 
        int cpu_user_rate = user * 100 / (kernel + user);

        pre_idleTime = idleTime;
        pre_kernelTime = kernelTime;
        pre_userTime = userTime;        
    }    
    return 0;
}

如果要实时显示CPU占用率,MonitorCPUusageThread这个函数放到线程里面执行。


 

猜你喜欢

转载自blog.csdn.net/luo_sen/article/details/87983270
今日推荐