zoukankan      html  css  js  c++  java
  • 获取进程CPU占用率

    获取进程CPU占用率

    // 时间转换
    static __int64 file_time_2_utc(const FILETIME* ftime)
    {
        LARGE_INTEGER li;
    
        li.LowPart = ftime->dwLowDateTime;
        li.HighPart = ftime->dwHighDateTime;
        return li.QuadPart;
    }
    
    // 获得CPU的核数
    static int get_processor_number()
    {
        SYSTEM_INFO info;
        GetSystemInfo(&info);
        return (int)info.dwNumberOfProcessors;
    }
    // 获取进程CPU占用
    int get_cpu_usage(int pid)
    {  
        //cpu数量
        static int processor_count_ = -1;
        //上一次的时间
        static __int64 last_time_ = 0;
        static __int64 last_system_time_ = 0;
    
        FILETIME now;
        FILETIME creation_time;
        FILETIME exit_time;
        FILETIME kernel_time;
        FILETIME user_time;
        __int64 system_time;
        __int64 time;
        __int64 system_time_delta;
        __int64 time_delta;
    
        int cpu = -1;
    
        if(processor_count_ == -1)
        {
            processor_count_ = get_processor_number();
        }
    
        GetSystemTimeAsFileTime(&now);
    
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
        if (!GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time))
        {
            return -1;
        }
        system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time)) / processor_count_;
        time = file_time_2_utc(&now);
    
        if ((last_system_time_ == 0) || (last_time_ == 0))
        {
            last_system_time_ = system_time;
            last_time_ = time;
            return -1;
        }
    
        system_time_delta = system_time - last_system_time_;
        time_delta = time - last_time_;
    
        if (time_delta == 0)
            return -1;
    
        cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);
        last_system_time_ = system_time;
        last_time_ = time;
        return cpu;
    }
    
  • 相关阅读:
    foreach_and_函数
    集合
    二维数组
    二维数组的操作
    字符串类型的一些操作
    数组循环的操作及思路
    数组操作
    js各种获取当前窗口页面宽度、高度的方法
    Jquery 获取 radio选中值,select选中值
    jQuery效果:隐藏、显示、切换、滑动、淡入淡出、动画
  • 原文地址:https://www.cnblogs.com/lzpong/p/3955891.html
Copyright © 2011-2022 走看看