【问题标题】:How to get CPU usage percent in C++ using the Sigar libraries如何使用 Sigar 库在 C++ 中获取 CPU 使用百分比
【发布时间】:2013-01-24 18:32:05
【问题描述】:

我正在尝试使用 SIGAR 库获取 c++ 中的 CPU 使用百分比,我编写了下面的代码来尝试获取此信息,但是出现了问题,我总是得到一个值 0.3... 而不是一个值在 0% 到 100% 之间。如何使用 SIGAR 库获取 CPU 使用百分比?

#include <QDebug>
#include <sigar.h>
extern "C" 
{
#include <sigar_format.h>
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    sigar_cpu_t cpu1;
    sigar_cpu_t cpu2;
    sigar_cpu_perc_t perc;
    sigar_cpu_perc_calculate(&cpu1, &cpu2, &perc);
    qDebug() << perc.combined;

    return a.exec();
}

【问题讨论】:

  • 您希望获得多少 CPU 使用率?
  • 我想像在任务管理器中一样获得所有核心 CPU 使用百分比

标签: c++ cpu-usage sigar


【解决方案1】:

编辑: 我不是Sigar 专家,这是我第一次听到有人提到它。根据我从代码中可以看出,sigar_cpu_perc_calculate 根据 CPU 的两个“快照”之间的差异确定负载,而不是使用两个不同的 CPU。

使用以下方法,我可以得到一些看起来有些准确的东西:

sigar_t *sigar_cpu;
sigar_cpu_t old;
sigar_cpu_t current;

sigar_open(&sigar_cpu);
sigar_cpu_get(sigar_cpu, &old);

sigar_cpu_perc_t perc;

while(1)
{
    sigar_cpu_get(sigar_cpu, &current);
    sigar_cpu_perc_calculate(&old, &current, &perc);

    std::cout << "CPU " << perc.combined * 100 << "%\n";
    old = current;
    Sleep(100);
}

sigar_close(sigar_cpu);
return 0;

【讨论】:

  • 我了解您想要实现的目标,我只是想了解 0.3 可能与在此特定运行期间运行的代码有何关联 - 也许 0.3 意味着 30%?
  • 根据我在网上收集到的信息,是的,你得到的值是 [0,1],所以要得到百分比,你必须乘以 100
  • 我认为 0.3... 并不意味着 CPU 使用百分比,因为我在启动 AIDA64 CPU 基准测试后运行程序并且任务管理器显示 100% 的 CPU 使用率
  • 是的,但是你的“基准”并不好,因为你只在特定的执行点打了一次电话
  • 我将代码放在一个循环中,但我总是得到相同的值,例如。如果第一个值为 34,则显示 34、34、34……如果第一个值为 54,则显示 54、54、54……而任务管理器和 AIDA64 显示 100% 的 CPU 使用率,sigar 是否需要初始化?
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 2012-10-19
  • 2020-04-27
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2020-11-27
  • 2011-10-10
相关资源
最近更新 更多