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;
    }
  • 相关阅读:
    idea 2017版破解
    UIRecorder 学习了解
    简单应用单例模式
    线程安全的单例模式(有参and无参)
    批量删除和批量修改(参数使用list)
    简单线程池开启线程
    随机数生成
    网络延迟-tc工具使用简单说明
    c++高级元编程 第一部分,第一节,第一小节
    Writing_Bug_Free_C_Code_Chapter_2_Know_Your_Environment
  • 原文地址:https://www.cnblogs.com/waytofall/p/5007549.html
Copyright © 2011-2022 走看看