C++ 获取和显示CPU利用率
C++ 获取和显示CPU利用率
这段代码展示了如何使用C++读取/proc/stat文件获取CPU统计信息,计算CPU利用率,并在Qt界面中实时显示。
void MainWindow::get_cpu_stat()
{
std::ifstream input;
input.open('/proc/stat', std::ios_base::in);
int total_diff = 0;
if (input.is_open()) {
std::string cpu;
int user, nice, system, idle, iowait, irq, softirq, stealstolen, guest;
input >> cpu >> user >> nice >> system >> idle >> iowait >> irq >> softirq >> stealstolen >> guest;
input.close();
int total_cpu_time = user + nice + system + idle + irq + softirq + guest + iowait + stealstolen;
if (this->total_cpu_time != 0) {
total_diff = total_cpu_time - this->total_cpu_time;
int idle_diff = idle - this->total_idle_time;
int user_diff = user - this->total_user_time;
int sys_diff = system - this->total_sys_time;
float total_rate = (total_diff - idle_diff) * 1.0 / total_diff;
float idle_rate = idle_diff * 1.0 / total_diff;
float user_rate = user_diff * 1.0 / total_diff;
float sys_rate = sys_diff * 1.0 / total_diff;
ui->left_1->setText(tr('系统: %1%').arg(QString::number(sys_rate * 100, 'f',2 )));
ui->left_2->setText(tr('用户: %1%').arg(QString::number(user_rate * 100, 'f', 2)));
ui->left_3->setText(tr('空闲: %1%').arg(QString::number(idle_rate * 100, 'f', 2)));
ui->right_1->setText(tr('总利用率: %1%').arg(QString::number(total_rate * 100, 'f', 1)));
ui->right_1->setStyleSheet('QLabel {
color:rgb(242, 21, 21)
}');
ui->frame_center->add_data(total_rate);
}
this->total_cpu_time = total_cpu_time;
this->total_idle_time = idle;
this->total_sys_time = system;
this->total_user_time = user;
}
else {
qDebug() << 'Cannot open file' << endl;
}
get_process_info(total_diff);
}
代码解释:
- 打开
/proc/stat文件: 使用std::ifstream打开/proc/stat文件,该文件包含CPU统计信息。 - 读取CPU时间: 读取
/proc/stat文件的第一行,获取CPU 各个状态的时间 (user, nice, system, idle等)。 - 计算CPU利用率:
- 计算总CPU时间和空闲时间差值。
- 根据差值计算总利用率、用户态利用率、内核态利用率和空闲率。
- 更新界面显示: 使用Qt框架的
QLabel控件显示计算出的CPU利用率。 - 保存当前CPU时间: 保存当前CPU时间,用于下次计算差值。
注意:
- 这段代码需要在Qt环境下运行,并依赖Qt的相关库。
get_process_info(total_diff)函数应该是用于获取进程信息的,本例中没有给出具体实现。
原文地址: https://www.cveoy.top/t/topic/AF7 著作权归作者所有。请勿转载和采集!