2011-09-07 3 views
1

내 멀티 스레드 응용 프로그램 (C++)은 pthread를 사용합니다. 응용 프로그램은 자동으로 스레드를 생성하고 필요할 때 다시 사용하며 너무 오랫동안 유휴 상태 일 때 스레드를 취소 할 수 있습니다.어떻게 작업자 스레드에서 부모 스레드 및 형제 스레드로 CPU 사용률을 프로그래밍 방식으로 얻으려면?

다른 시나리오에 적용될 때 응용 프로그램의 성능을 확인하기위한 통계 데이터를 캡처하기 위해 "특수 스레드"를 넣었습니다.

얼마나 많은 CPU가 사용되었는지 알기 위해 프로세스가 종료 될 때까지 기다릴 수 없습니다. , 그것을 할 수있는 더 좋은 방법이 있다면

struct rusage ru; 
    double utime, stime, ttime ; 

if (getrusage(RUSAGE_SELF, &ru) == -1) 
    return; 

utime = ru.ru_utime.tv_sec + (ru.ru_utime.tv_usec/1000000); // Total CPU time used in user space 
stime = ru.ru_stime.tv_sec + (ru.ru_stime.tv_usec/1000000); // Total CPU time used in kernel space 
ttime = utime + stime; // Total CPU Utilization 

는 좋은 해킹, 말해 줄 수 :

특수 스레드에서이를 사용하려고했으나 결과는 PS & 상단의 출력과 일치하는 것 같지 않았어요 또는 위의 올바른 방법이며, 실제로 다른 뭔가가 누락 되었습니까?

미리 감사드립니다.

+4

코드가 정상적으로 보입니다. 유일한 사소한 점은'ru.ru_utime.tv_usec/1000000'과 그 쌍둥이가 정수 구분 인 반면, 주변 코드는 부동 소수점 구분이 의도 된 것임을 암시합니다. 이것은 측정 된 시간의 중요한 사소한 차이를 설명하지는 않습니다. – NPE

답변

0

Linux에있는 경우 특수/proc 파일 시스템을 사용하여 프로세스에 대한 모든 흥미있는 정보를 찾을 수 있습니다. 나는 전문가는 아니지만 나는 CPU 사용 통계가 어딘가에 있다는 것을 확신합니다.

0

괜찮아!

위에 게시 한 코드는 상당히 정확합니다. 혼란은 잘못된 관찰에 의해서만 발생했습니다.

관련 문제