CPU使用率计算

昨天接到临时任务,需要将一个工作线程执行真正工作的时机推迟到CPU空闲时执行。当时第一感觉认为是将线程优先级设置为空闲级别就行了,以为只有CPU空闲下来才会去跑这个线程,实际上应该不是,毕竟即时是空闲级别也需要排入队列,只不过优先级低而已。当然其实也不能说CPU空闲时来执行,应该说使用率比较低的时候来执行比较合适。

参考博客:http://www.cnblogs.com/TenosDoIt/p/3242910.html,描述了比较多的方法来介绍如何计算CPU使用率。

我尝试了两种方式,使用VS的pdh来计算好像不是很准,但是使用GetSystemTimers来计算基本和任务管理器中显示的很接近了,这里接下这段代码:

// CpuRate.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <cstdio>
#include <conio.h>

class CCPUUseRate
{
public:
    BOOL Initialize()
    {
        FILETIME ftIdle, ftKernel, ftUser;
        BOOL flag = FALSE;
        if (flag = GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
        {
            m_fOldCPUIdleTime = FileTimeToDouble(ftIdle);
            m_fOldCPUKernelTime = FileTimeToDouble(ftKernel);
            m_fOldCPUUserTime = FileTimeToDouble(ftUser);

        }
        return flag;
    }
    //调用Initialize后要等待1左右秒再调用此函数
    int GetCPUUseRate()
    {
        int nCPUUseRate = -1;
        FILETIME ftIdle, ftKernel, ftUser;
        if (GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
        {
            double fCPUIdleTime = FileTimeToDouble(ftIdle);
            double fCPUKernelTime = FileTimeToDouble(ftKernel);
            double fCPUUserTime = FileTimeToDouble(ftUser);
            nCPUUseRate= (int)(100.0 - (fCPUIdleTime - m_fOldCPUIdleTime)
                / (fCPUKernelTime - m_fOldCPUKernelTime + fCPUUserTime - m_fOldCPUUserTime)
                *100.0);
            m_fOldCPUIdleTime = fCPUIdleTime;
            m_fOldCPUKernelTime = fCPUKernelTime;
            m_fOldCPUUserTime = fCPUUserTime;
        }
        return nCPUUseRate;
    }
private:
    double FileTimeToDouble(FILETIME &filetime)
    {
        return (double)(filetime.dwHighDateTime * 4.294967296E9) + (double)filetime.dwLowDateTime;
    }
private:
    double m_fOldCPUIdleTime;
    double m_fOldCPUKernelTime;
    double m_fOldCPUUserTime;
};

int main()
{
    do
    {
        CCPUUseRate cpuUseRate;
        if (!cpuUseRate.Initialize())
        {
            printf("WorkThread :初始化系统使用时间失败,错误码%d", GetLastError());
            break;
        }

        while (true)
        {
            Sleep(1000);
            int liCpuUserRate = cpuUseRate.GetCPUUseRate();
            printf("\r当前CPU使用率为:%4d%%", liCpuUserRate);
        }

    } while (false);

    return 0;
}

时间: 2024-11-12 15:45:16

CPU使用率计算的相关文章

RT-Thread的CPU使用率计算

CPU 的使用率一般是我们比较关心的问题,在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率,并通过串口打印出来.首先我们在初始化线程中设置好钩子函数,并在 LED 线程中给系统人为的加入很多“事情”,让其占用率变高,方便统计,然后每个 1 秒中打印一次 CPU 使用率.其中 CPU 的使用率我们是根据 CPU 的空闲率反推出来的. #include <rtthread.h> #include <rthw.h> #define CPU_USAGE_CALC_TICK 10 #

cpu使用率的计算

proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的. /proc目录中有一些以数字命名的目录,它们是进程目录.系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,

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

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

查看线程linux cpu使用率

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据

【研究任务】精准控制进程cpu使用率

一.cpu的使用率计算 cpu的使用率的获取可以通过top命令或者/proc/<pid>/stat文件 以下是计算cpu使用率有关的参数: pid=17184 进程号 utime=45010 该任务在用户态运行的时间,单位为jiffies stime=4050 该任务在核心态运行的时间,单位为jiffies cutime=0 所有已死线程在用户态运行的时间,单位为jiffies cstime=0 所有已死在核心态运行的时间,单位为jiffies #参考python包psutil源码 def c

一文秒懂CPU使用率

目录 CPU:Cores, and Hyper-Threading? 超线程(Hyper-Threading?) 多核(multi-cores) CPU使用率计算 CPU使用率测试 如何计算CPU使用率 实现CPU使用率统计程序 CPU:Cores, and Hyper-Threading? 超线程(Hyper-Threading?) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上.单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU,为此P4处理器需要多加入

Linux CPU使用率的计算

     CPU 使用率衡量的是程序运行占用的CPU 百分比.Linux 的CPU 使用率信息可以通过/proc/stat 文件计算得到. proc 文件系统       /proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提

Zabbix通过SNMP监控多核CPU使用率时, 计算CPU平均使用率

环境:没有Agent,只能通过SNMP监控时,需要获取多核CPU的平均使用率. ZABBIX的使用SNMP监控CPU使用率时,由于设备都是多核CPU,监控的都是单独某一核心的使用率,但单独某一核使用率过高触发告警实际意义不大. 所以写了一个"外部检查"查询CPU的每个核心的使用率,然后再计算该设备CPU的总体的一个使用率. cd /usr/local/share/zabbix/externalscripts/ vim /usr/local/share/zabbix/externalsc

[Python Study Notes]计算cpu使用率

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' >>文件: cpu使用率.py >>作者: liu yang >>邮箱: [email protected] ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''