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);  //返回整型值

    }

     

  • 相关阅读:
    第13周学习进度情况
    【Android进阶】获取Android软件的版本信息
    【Android进阶】Android程序与JavaScript之间的简单调用
    字符串长度
    约瑟夫问题
    输入n个数和输出调整后的n个数
    输入三个整数,按由小到大的顺序输出
    学校oj平台上不去
    输入10个整数
    输入三个字符串,按由小到大的顺序输出
  • 原文地址:https://www.cnblogs.com/runninglzw/p/5133332.html
Copyright © 2011-2022 走看看