zoukankan      html  css  js  c++  java
  • Windows下测量cpu利用率的类

    方法参考网上的一段代码,把它改成了类以方便调用,很简单,但是可以一用,哈哈。

    cpu_usage.h

    #include <windows.h>
    
    class CpuUsage {
    public:
        CpuUsage();
        void init();
        // get cpu usage rate from the last invoke of the function or init
        int get();
    
    private:
        bool inited_;
        ULONGLONG cpu_time_;
        ULONGLONG cpu_idle_time_;
    };

    cpu_usage.cpp

    #include "cpu_usage.h"
    
    CpuUsage::CpuUsage(): inited_(false) {}
    
    void CpuUsage::init() {
        FILETIME ft_sys_idle;
        FILETIME ft_sys_kernel;
        FILETIME ft_sys_user;
    
        ULARGE_INTEGER ul_sys_idle;
        ULARGE_INTEGER ul_sys_kernel;
        ULARGE_INTEGER ul_sys_user;
    
        GetSystemTimes(&ft_sys_idle, /* System idle time */
            &ft_sys_kernel,          /* system kernel time */
            &ft_sys_user);           /* System user time */
    
        CopyMemory(&ul_sys_idle, &ft_sys_idle, sizeof(FILETIME));
        CopyMemory(&ul_sys_kernel, &ft_sys_kernel, sizeof(FILETIME));
        CopyMemory(&ul_sys_user, &ft_sys_user, sizeof(FILETIME));
    
        cpu_time_ = ul_sys_kernel.QuadPart + ul_sys_user.QuadPart;
        cpu_idle_time_ = ul_sys_idle.QuadPart;
    
        inited_ = true;
    }
    
    // get cpu usage rate from the last invoke of the function or init
    int CpuUsage::get() {
        if (!inited_)
            return -1;
    
        FILETIME ft_sys_idle;
        FILETIME ft_sys_kernel;
        FILETIME ft_sys_user;
    
        ULARGE_INTEGER ul_sys_idle;
        ULARGE_INTEGER ul_sys_kernel;
        ULARGE_INTEGER ul_sys_user;
    
        GetSystemTimes(&ft_sys_idle, /* System idle time */
            &ft_sys_kernel,          /* system kernel time */
            &ft_sys_user);           /* System user time */
    
        CopyMemory(&ul_sys_idle, &ft_sys_idle, sizeof(FILETIME));
        CopyMemory(&ul_sys_kernel, &ft_sys_kernel, sizeof(FILETIME));
        CopyMemory(&ul_sys_user, &ft_sys_user, sizeof(FILETIME));
    
        ULONGLONG interval = ul_sys_kernel.QuadPart + ul_sys_user.QuadPart - cpu_time_;
        int use_rate = (interval - (ul_sys_idle.QuadPart - cpu_idle_time_)) * 100 / interval;
    
        cpu_time_ = ul_sys_kernel.QuadPart + ul_sys_user.QuadPart;
        cpu_idle_time_ = ul_sys_idle.QuadPart;
    
        return use_rate;
    }
  • 相关阅读:
    物联网相关开源项目整理
    使用Blynk打造一款物联网产品
    物联网、开源硬件与开源社区
    Spring boot+CXF开发WebService Demo
    vsftp 常见配置测试与故障排除
    Linux vsftpd 配置文件详解
    免费在线文档翻译器
    C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
    微软office web apps 服务器搭建之在线文档预览
    C#把datetime类型的日期转化成年月日或其他格式方法总结
  • 原文地址:https://www.cnblogs.com/waytofall/p/5007549.html
Copyright © 2011-2022 走看看