瑞帅
2018-02-22 12:07
采纳率: 75%
浏览 2.3k

请问怎么使用c语言获取电脑cpu利用率(Windows和Linux)

请问怎么使用c语言获取电脑cpu利用率(Windows和Linux)
and cpu利用率是按照字面意思计算的么?
本人真的是菜鸟,求指点,恳求

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • threenewbee 2018-02-22 15:53
    已采纳

    单个cpu利用率就是cpu执行用户进程的时间/总时间
    如果计算机有多个cpu(内核),那么还需要除以cpu个数。

    linux下的代码:http://blog.csdn.net/yusiguyuan/article/details/39924687
    windows下的代码:http://blog.csdn.net/fyxichen/article/details/50577580

    已采纳该答案
    打赏 评论
  • KiterCher 2018-02-23 06:12
     //CPU利用率  
    FILETIME m_preidleTime;  
    FILETIME m_prekernelTime;  
    FILETIME m_preuserTime;  
    
    __int64 CompareFileTime2(FILETIME time1, FILETIME time2)  
    {  
        __int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;  
        __int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;  
    
    
        return   b - a;  
    }  
    
    void GetCpuUseage()  
    {  
        GetSystemTimes(&m_preidleTime, &m_prekernelTime, &m_preuserTime);  
        Sleep(1000);  
    }  
    
    double CpuUseage()  
    {  
        FILETIME idleTime;  
        FILETIME kernelTime;  
        FILETIME userTime;  
        GetSystemTimes(&idleTime, &kernelTime, &userTime);  
    
    
        int idle = CompareFileTime2(m_preidleTime, idleTime);  
        int kernel = CompareFileTime2(m_prekernelTime, kernelTime);  
        int user = CompareFileTime2(m_preuserTime, userTime);  
    
    
        if (kernel + user == 0)  
            return 0.0;  
        //(总的时间-空闲时间)/总的时间=占用cpu的时间就是使用率  
        double cpu = abs((kernel + user - idle) * 100 / (kernel + user));  
    
        m_preidleTime = idleTime;  
        m_prekernelTime = kernelTime;  
        m_preuserTime = userTime;  
        return cpu;  
    }  
    
    打赏 评论

相关推荐 更多相似问题