Как правильно рассчитать процент использования процессора с помощью библиотек SIGAR

Я пишу код, чтобы получить процент от используемого процессора на процесс, но что-то не так с моим кодом. Это отображает странные значения, такие как 3,63499e + 262% и 0%, в то время как диспетчер задач отображает значение больше 0% и ниже или равно 100%. Что я делаю не так?

sigar_t *sigarproclist;
sigar_proc_list_t proclist;
sigar_open(&sigarproclist);
sigar_proc_list_get(sigarproclist, &proclist);
for (size_t i = 0; i < proclist.number; i++)
{
sigar_proc_cpu_t cpu;
sigar_proc_cpu_get(sigarproclist, proclist.data[i], &cpu);
sigar_proc_state_t procstate;
sigar_proc_state_get(sigarproclist, proclist.data[i], &procstate);
qDebug() << procstate.name << 100 * cpu.percent << "%";
}
sigar_close(sigarproclist);

0

Решение

Я сделал некоторые изменения в своем коде, и теперь он выглядит корректно.

sigar_t *sigarcpulist;
sigar_cpu_info_list_t cpulist;
sigar_open(&sigarcpulist);
sigar_cpu_info_list_get(sigarcpulist, &cpulist);
sigar_close(sigarcpulist);

forever
{
float percent;
sigar_t *sigarproclist;
sigar_proc_list_t proclist;
sigar_open(&sigarproclist);
sigar_proc_list_get(sigarproclist, &proclist);
for (size_t i = 0; i < proclist.number; i++)
{
sigar_proc_cpu_t cpu;
sigar_proc_cpu_get(sigarproclist, proclist.data[i], &cpu);
}
Sleep(1000);
for (size_t i = 0; i < proclist.number; i++)
{
sigar_proc_cpu_t cpu;
int status = sigar_proc_cpu_get(sigarproclist, proclist.data[i], &cpu);
if (status == SIGAR_OK)
{
sigar_proc_state_t procstate;
sigar_proc_state_get(sigarproclist, proclist.data[i], &procstate);
percent = cpu.percent * 100 / cpulist.size;
qDebug() << procstate.name << percent << "%";
}
}
sigar_close(sigarproclist);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]