C++获取系统cpu占用
时间: 2024-12-11 16:39:18 浏览: 11
在C++中,获取系统的CPU占用率通常需要借助操作系统提供的API或者第三方库,因为C++标准库本身并不直接提供这样的功能。以下是使用Linux系统调用`getrusage`或者第三方库如`boost`或`Poco`来获取CPU占用信息的一种常见方法:
1. **使用C++标准库和`<sys/resource>`头文件** (适用于Linux和Unix-like系统):
```cpp
#include <iostream>
#include <sys/resource.h>
double get_cpu_usage(pid_t pid = getpid()) {
struct rusage usage;
if (getrusage(RUSAGE_SELF, &usage) == -1) {
perror("getrusage");
return -1;
}
double utime = usage.ru_utime.tv_sec + usage.ru_utime.tv_usec / 1000000.0; // user CPU time in seconds
double stime = usage.ru_stime.tv_sec + usage.ru_stime.tv_usec / 1000000.0; // system CPU time in seconds
double cpu_time = utime + stime; // total CPU time
double total_user_time = getrusage(RUSAGE_CHILDREN, &usage).ru_utime.tv_sec; // or just use ru_utime for all processes
return (cpu_time - total_user_time) * 100 / total_user_time; // percentage of CPU used by the process
}
int main() {
double cpu_usage = get_cpu_usage();
std::cout << "Current CPU usage: " << cpu_usage << "%\n";
return 0;
}
```
2. **使用第三方库** (比如Boost或Poco)可以简化这个过程,并提供跨平台的支持。例如,使用Boost.Asio库可以更方便地读取系统资源:
```cpp
#include <boost/process.hpp>
std::string get_cpu_usage_with_boost() {
boost::process::system_info sys_info;
double cpu_usage = (sys_info.total_processor_count * sys_info.load_average().average()) * 100;
return std::to_string(cpu_usage) + "%";
}
int main() {
std::cout << "Current CPU usage with Boost: " << get_cpu_usage_with_boost() << "\n";
return 0;
}
```
注意:以上示例仅展示基本的概念,实际应用中可能需要处理异常,并根据需求选择合适的频率(比如定期刷新)来获取实时的CPU使用率。
阅读全文