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;
}
时间: 2024-10-18 19:52:33

Windows下测量cpu利用率的类的相关文章

如何在Windows下用cpu模式跑通py-faster-rcnn 的demo.py

关键字:Windows.cpu模式.Python.faster-rcnn.demo.py 声明:本篇blog暂时未经二次实践验证,主要以本人第一次配置过程的经验写成.计划在7月底回家去电脑城借台机子试试验证步骤的正确性,本blog将根据实际遇到的问题持续更新.另外blog中除提到的下载链接外我还会给出网盘链接方便下载,包括我的整个工程的网盘链接.如果有些报错解决不了可直接拿本人的相关文件替换,本篇blog具有较高的参考性. 本人微软版caffe工程     下载链接:http://pan.bai

linux下C语言实现求CPU利用率

第一节   祸起 本来就是想通过写个小程序测试CPU利用率从而可以检验其他的工具性能之类的数据,后来参照IPbench中的cpu_target_lukem插件实现我们的功能,原理很简单:就是我们给程序设置了极低的优先级,如果有任何计算任务都会打断它,而如果没有计算任务,我们的程序就会占用cpu时间,所以我们的程序的运行时间基本上可以算作CPU的闲暇时间. 所以我们计算总的CPU利用率的方法就是  : CPU利用率 = 1 - 程序占用cpu时间/程序总的运行时间. 主要功能实现代码如下: [cp

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据 某一线程Cpu使用率的计算 计算方法 实验数据 多核情况下cpu使用率的计算 实验一 描述 数据一 数据二 实验二 描述 数据一 数据二 主要问题 Java 系统

Windows下caffe安装详解(仅CPU)

本文大多转载自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己实战心得. 1.环境:windows 7\VS2013 2.caffe-windows准备 (1)下载官方caffe-windows并解压,将 .\windows\CommonSettings.props.example备份,并改名为CommonSettings.props.如图4所示: 图 4:修改后的CommonSettings.props文件 附带说明

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢 所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾

Zabbix无法获取Windows主机CPU利用率、负载等问题处理

今天随机查看服务器时,无意中发现某机器的CPU利用率和负载等信息出不来,远程测试也一直提示ZBX_NOTSUPPORTED. 通知SA调整Agent为Debug模式,终于发现问题所在: 3508:20150504:205003.406 check_counter_path(): cannot make counterpath '\2\674': [0xC0000BBD] A required argument is missing or incorrect. 参考此帖处理:ZBX-903 Thi

当有超过64个逻辑cpu时,Windows 下Oracle db 实例启动(startup)时会hang(挂起)

Bug 9772171 - Database startup hangs on Windows when machine has more than 64 cores [ID 9772171.8] 该文章已经说明:在11.2.0.2 已经fix(解决)该bug. 而现在11gR2版本已经推出了11.2.0.4,并且11.2.0.4是最终的11gR2版本.所以我们推荐安装11.2.0.4 外加最新的psu 最新的psu可以 查询这个文章获得:Oracle Database, Networking 

Zabbix监控windows的CPU利用率和其他资源

zabbix的WEB端--配置-模板--Template OS Windows--项目--创建项目 名称:UserPerfCountercpu 键值:UserPerfCountercpu 数据类型:数字的(浮点) 单位:% 数据更新间隔(秒):3 应用集:CPU 将此项目添加到图片(或者筛选) windows下的配置文件zabbix_agentd.conf添加以下文字 PerfCounter=UserPerfCountercpu,"\Processor(_Total)\% Processor T

windows下揪出java程序占用cpu很高的线程

1.找到java进程对应的pid.通过任务管理器.linux---top 2.然后把java进程导出快照.直接运行命令.stack -l 31372 > c:/31372.stack 3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3 右键点击需要查看的进程---properties linux下先输入top,然后再按shift+h 或"H",此时打开的是线程视图,pid