看流星社区

 找回密码
 注册账号
查看: 4476|回复: 0

获取当前进程的CPU使用率和内存使用

[复制链接]

该用户从未签到

发表于 2014-3-3 19:17:06 | 显示全部楼层 |阅读模式
int GetProcessInfo::GetProcessNumber()
{
        SYSTEM_INFO info;
        GetSystemInfo(&info);
        return (int)info.dwNumberOfProcessors;
}

// 时间格式转换
__int64 GetProcessInfo::FileTimeToInt64(const FILETIME& time)
{
        ULARGE_INTEGER tt;
        tt.LowPart = time.dwLowDateTime;
        tt.HighPart = time.dwHighDateTime;
        return(tt.QuadPart);
}

double GetProcessInfo::get_cpu_usage()
{  
        //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;

        double cpu = -1;

        if(processor_count_ == -1)
        {
                processor_count_ = GetProcessNumber();
        }

        GetSystemTimeAsFileTime(&now);

        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION/*PROCESS_ALL_ACCESS*/, false, m_ProcessID);
        if (!hProcess)
        {
                return -1;
        }
        if (!GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time))
        {
                return -1;
        }
        system_time = (FileTimeToInt64(kernel_time) + FileTimeToInt64(user_time)) / processor_count_;  //CPU使用时间
        time = FileTimeToInt64(now);                //现在的时间

        last_system_time_ = system_time;
        last_time_ = time;
        CloseHandle( hProcess );

        Sleep(1000);

        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION/*PROCESS_ALL_ACCESS*/, false, m_ProcessID);
        if (!hProcess)
        {
                return -1;
        }
        if (!GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time))
        {
                return -1;
        }
        GetSystemTimeAsFileTime(&now);
        system_time = (FileTimeToInt64(kernel_time) + FileTimeToInt64(user_time)) / processor_count_;  //CPU使用时间
        time = FileTimeToInt64(now);                //现在的时间

        CloseHandle( hProcess );

        cpu = ((double)(system_time - last_system_time_) / (double)(time - last_time_)) * 100;
        return cpu;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-14 21:38

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表