2013-02-20 23 views
0

我正在編寫一個代碼來獲取每個進程使用CPU的百分比,但是我的代碼有些問題。它顯示奇怪的值,例如3.63499e + 262%和0%,而任務管理器顯示的值大於0%,小於或等於100%。我做錯了什麼?如何使用SIGAR庫正確獲取使用的CPU的每個進程的百分比

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); 
} 
相關問題