C++ 如何使用SIGAR库正确获取每个进程已用CPU的百分比

C++ 如何使用SIGAR库正确获取每个进程已用CPU的百分比,c++,cpu-usage,sigar,C++,Cpu Usage,Sigar,我正在编写一个代码,以获得每个进程所用CPU的百分比,但我的代码有问题。显示奇怪的值,如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 &

我正在编写一个代码,以获得每个进程所用CPU的百分比,但我的代码有问题。显示奇怪的值,如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);
sigar\u t*sigarproclist;
sigar\U proc\U list\U proc\U list;
sigar_打开(&sigarproclist);
sigar_proc_list_get(sigarproclist,&proclist);
对于(大小i=0;iqDebug()我在代码中做了一些更改,现在看起来它是有效的

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);
}
sigar\u t*sigarcpulist;
信号cpu信息列表cpu列表;
sigar_开放式(&sigarcpulist);
sigar\U cpu\U info\U list\U get(sigarcpulist和cpulist);
sigar_close(sigarcpulist);
永远
{
浮动百分比;
sigar_t*sigarproclist;
sigar\U proc\U list\U proc\U list;
sigar_打开(&sigarproclist);
sigar_proc_list_get(sigarproclist,&proclist);
对于(大小i=0;i