2013-02-20 3 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); 
}