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);
}

代码解释:

  1. 打开/proc/stat文件: 使用std::ifstream打开/proc/stat文件,该文件包含CPU统计信息。
  2. 读取CPU时间: 读取/proc/stat文件的第一行,获取CPU 各个状态的时间 (user, nice, system, idle等)。
  3. 计算CPU利用率:
    • 计算总CPU时间和空闲时间差值。
    • 根据差值计算总利用率、用户态利用率、内核态利用率和空闲率。
  4. 更新界面显示: 使用Qt框架的QLabel控件显示计算出的CPU利用率。
  5. 保存当前CPU时间: 保存当前CPU时间,用于下次计算差值。

注意:

  • 这段代码需要在Qt环境下运行,并依赖Qt的相关库。
  • get_process_info(total_diff) 函数应该是用于获取进程信息的,本例中没有给出具体实现。
C++ 获取和显示CPU利用率

原文地址: https://www.cveoy.top/t/topic/AF7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录