[C++]-Windows下获取CPU、内存利用率
CPU利用率
内存利用率
在《Windows下使用PDH获取性能计数器(CPU、内存、网络流量等)》中介绍了通过性能计数器获取计算机性能信息,若只是获取CPU利用率及内存利用率,可以直接通过API获取。Windows提供了相关函数来获取:
GetSystemTimes:获取CPU的空闲、内核、用户使用时间;
GetProcessTimes:获取进程的内核、用户使用时间,以及创建、退出时间等;
GlobalMemoryStatusEx:获取内存相关的详细信息;
CPU利用率
GetProcessTimes返回的使用时间是FILETIME格式的,获取CPU利用率只需获得一段时间内空闲时间与使用时间即可方便计算得到。为了得到当前CPU利用率,需要调用两次(间隔一段时间,如1s),然后计算其差值。
其中kernelTime中包含idleTime,所以需要减去后才能得到实际的内核使用时间。
__int64 Filetime2Int64(const FILETIME &ftime)
{LARGE_INTEGER li;li.LowPart = ftime.dwLowDateTime;li.HighPart = ftime.dwHighDateTime;return li.QuadPart;
}__int64 CompareFileTime2(const FILETIME &preTime, const FILETIME &nowTime)
{return Filetime2Int64(nowTime) - Filetime2Int64(preTime);
}double getCpuUsage()
{FILETIME preIdleTime;FILETIME preKernelTime;FILETIME preUserTime;GetSystemTimes(&preIdleTime, &preKernelTime, &preUserTime);Sleep(1000);FILETIME idleTime;FILETIME kernelTime;FILETIME userTime;GetSystemTimes(&idleTime, &kernelTime, &userTime);auto idle = CompareFileTime2(preIdleTime, idleTime);auto kernel = CompareFileTime2(preKernelTime, kernelTime);auto user = CompareFileTime2(preUserTime, userTime);if (kernel + user == 0)return 0;return 1.0*(kernel + user - idle) / (kernel + user);
}
内存利用率
通过GlobalMemoryStatusEx获取内心相关详细信息,信息的详细结构:
typedef struct _MEMORYSTATUSEX {DWORD dwLength;DWORD dwMemoryLoad;DWORDLONG ullTotalPhys;DWORDLONG ullAvailPhys;DWORDLONG ullTotalPageFile;DWORDLONG ullAvailPageFile;DWORDLONG ullTotalVirtual;DWORDLONG ullAvailVirtual;DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
其中dwMemoryLoad即为内存利用率。
const int Byte2MB = 1024 * 1024;
void getMemoryRate() {MEMORYSTATUSEX memStatus;memStatus.dwLength = sizeof(memStatus);GlobalMemoryStatusEx(&memStatus);int nAvail = (int)(memStatus.ullAvailPhys / Byte2MB);int nTotal = (int)(memStatus.ullTotalPhys / Byte2MB);cout << "Memory: " << memStatus.dwMemoryLoad << "%, " << nAvail << "/" << nTotal << endl;
}
[C++]-Windows下获取CPU、内存利用率相关推荐
- python3 获取cpu 内存利用率
python通过第三方包psutil来获取cpu和内存信息 1.通过pip安装psutil: pip install psutil 2.获取指定进程的内存/CPU利用率: # 定义一个进程列表 pro ...
- Qt windows下获取CPU、主板、硬盘、网卡等相关信息
首先磁盘ID和磁盘序列号是不一样的,磁盘的一些相关信息可通过以下方式获取 查看步骤,右键我的电脑---->选择属性---->选择设备管理器---->展开磁盘驱动器 就可以看到磁 ...
- java获取windows系统信息(CPU,内存,文件系统,硬盘大小)
Java怎么获取windows系统信息,如CPU,内存,文件系统,硬盘大小? java实现这些功能的确有点麻烦,没有C语言方便.java在windows这方还是弱了一点.不过麻烦是麻烦点,针对这些功能 ...
- golang 获取cpu 内存 硬盘 使用率 信息 进程信息
目录 1.获取 cpu 内存 磁盘使用率 2.获取本机信息 3. 获取CPU信息 4. 获取内存信息 5.获取磁盘信息 6.获取网络信息 7. 获取进程信息 使用库: go get github.co ...
- c语言windows获取时间,【转载】c/c++在windows下获取时间和计算时间差的几种方法总结...
一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...
- Windows下获取视频设备的一种改进实现
之前在https://blog.csdn.net/fengbingchun/article/details/102806822中介绍过在Windows下获取视频设备列表的方法.其实那种实现方法是有缺陷 ...
- C++在windows下获取本地主机ipv4地址和ipv6地址的代码
把内容过程中经常用的内容段记录起来,下面内容段是关于C++在windows下获取本地主机ipv4地址和ipv6地址的内容,应该是对码农有所用处. #include <Winsock2.h> ...
- Windows下获取usb视频设备vendor id和product id的4种方法
之前在https://blog.csdn.net/fengbingchun/article/details/103507754 博文中介绍过如何在Linux获取usb视频设备的vendor id和pr ...
- linux下如何获取cpu的利用率
"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些 ...
最新文章
- 后盾网lavarel视频项目---laravel 使用laracasts/flash插件提示信息
- 小F的2013应届校招历程小结
- 深入理解JVM虚拟机(十):Java内存模型与多线程
- DBA(二):percona软件、innobackupex备份与恢复
- 成功解决sklearn\ensemble\weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an interna
- 使用remix和matemask部署智能合约到以太坊测试网络
- Centos7 Git源码安装
- 【PHP入门到精通】:Ch05:字符串处理
- 06_jQuery_内容过滤
- Flask笔记-通过Model访问数据库
- 通过jquer连接数据库里面的数据、LINQ简介
- mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?
- 面试官:Spring该选择哪个构造方法来进行实例化?画重点要考的
- 教务管理系统设计与实现
- html5 最小化,当前界面最小化快捷键 窗口最小化和全屏化的快捷键是什么?
- 一位程序员工作10年总结的10条建议
- MySQL初始密码的查看
- 萝卜怎么吃最治病:白菜萝卜汤养胃暖身
- 学完高性能计算后的发展怎么样?
- Linux大全——Linux系统学习资源合集