zoukankan      html  css  js  c++  java
  • C++ 获取进程内存占用和CPU利用率等信息

    1.获取内存占用信息

    获取步骤:

    (1)获取当前进程句柄 使用GetCurrentProcess(),返回一个当前进程的句柄

    (2)定义一个保存内存信息的结构体  PROCESS_MEMORY_COUNTERS pmc;

    结构体定义如下:

    typedef struct _PROCESS_MEMORY_COUNTERS {
    DWORD cb;                                                                                      Size of the structure, in bytes.//结构体大小
    DWORD PageFaultCount;                               Number of page faults. // 缺页中断次数
    SIZE_T PeakWorkingSetSize;                             Peak working set size, in bytes. // 使用内存高峰
    SIZE_T WorkingSetSize;                                Current working set size, in bytes. // 当前使用的内存
    SIZE_T QuotaPeakPagedPoolUsage;                          Peak paged pool usage, in bytes. // 使用页面缓存池高峰
    SIZE_T QuotaPagedPoolUsage;                               Current paged pool usage, in bytes.// 使用页面缓存池
    SIZE_T QuotaPeakNonPagedPoolUsage;                              Peak nonpaged pool usage, in bytes.// 使用非分页缓存池高峰
    SIZE_T QuotaNonPagedPoolUsage;                          Current nonpaged pool usage, in bytes.// 使用非分页缓存池
    SIZE_T PagefileUsage;                              Current space allocated for the pagefile, in bytes.Those pages may or may not be in memory.// 使用分页文件
    SIZE_T PeakPagefileUsage;                             Peak space allocated for the pagefile, in bytes.// 使用分页文件高峰
    } PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;
     
    (3)获取当前进程的内存信息,保存到结构体pmc中(第二个参数)  使用GetProcessMemoryInfo()
    API定义如下:
    GetProcessMemoryInfo(
    HANDLE Process,                                                                 获取内存使用情况的进程句柄。
    PPROCESS_MEMORY_COUNTERS ppsmemCounters,                      返回内存使用情况的结构
    DWORD cb                                            结构的大小
    );DE
     
     

    2.获取CPU利用率

    获取步骤:

    (1)获取当前进程句柄   通过OpenProcess(),返回一个进程句柄

    函数原型如下:

    HANDLE OpenProcess(
    DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
    BOOL bInheritHandle, // 是否继承句柄
    DWORD dwProcessId// 进程标示符,可以通过getpid()获取当前进程ID
    );
    (2)获取CPU使用时间 通过调用GetProcessTimes()
    函数原型如下:
    BOOL
    WINAPI
    GetProcessTimes(
    __in HANDLE hProcess,                                  需要获取相关时间的进程句柄
    __out LPFILETIME lpCreationTime,          进程的创建时间
    __out LPFILETIME lpExitTime,            进程的退出时间
    __out LPFILETIME lpKernelTime,            进程在内核模式下的所有时间
    __out LPFILETIME lpUserTime            进程在用户模式下的所有时间
    );
    CPU使用时间=(lpKernelTime+lpUserTime)/GetProcessNumber()(内核数)
    内核数获取方法如下:
    int GetProcessNumber()  

    {  

        SYSTEM_INFO info;  

        GetSystemInfo(&info);

        return (int)info.dwNumberOfProcessors;  

    (3)计算CPU利用率

    CPU利用率=(现在的CPU占用时间-过去的CPU占用时间)/系统时间差

    注:系统时间差可以通过GetSystemTimeAsFileTime()获取,然后在转换为int64类型即可,自定义转换方法如下:

    __int64 FileTimeToInt64(const FILETIME& time)  

    {  

        ULARGE_INTEGER tt;  //64位无符号整型值

        tt.LowPart = time.dwLowDateTime;  

        tt.HighPart = time.dwHighDateTime;

        return(tt.QuadPart);  //返回整型值

    }

     

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/runninglzw/p/5133332.html
Copyright © 2011-2022 走看看