2008-11-04 3 views
4

현재 CPU 사용률을 인식해야하는 MFC 응용 프로그램을 작성 중입니다. 다른 시점에 여러 개의 스레드가있을 수 있지만 대량의 작업은 주 스레드에 의해 수행됩니다.Win32 : 멀티 코어/멀티 프로세서 시스템에서 스레드 CPU 사용률을 계산하십시오.

이 주 스레드가 사용하는 CPU의 비율을 계산하는 방법을 찾으려고합니다. 그러나 멀티 CPU/멀티 코어 환경에서이 작업을 정확히 수행하는 방법에 관해 몇 가지 문제가 있습니다. 문제는 대부분의 시스템 호출이 시스템 정보를 제공하는 반면, 메인 스레드가 실행중인 프로세서에 대한 정보가 필요하다는 것입니다.

나는 WMI를 살펴 봤지만 과업이라고 생각한다. GetThreadTimes()가 필요한 기능을 수행합니까?

답변

7

메인 스레드가 다른 시간대에 다른 CPU에서 실행될 수 있으므로 "메인 스레드가 실행중인 프로세서 관련 정보"가 의미가 없을 수도 있습니다. 모든 프로세서 일 수 있습니다. Windows는 스레드가 CPU에서 실행 한 시간을 추적하지 않으므로 "CPU 당이 스레드의 실행 시간 목록을 제공하십시오"라는 메시지를 표시 할 수 없습니다. 단 하나의 예외는 스레드 선호도 마스크를 단일 CPU로 설정 한 경우입니다. 스레드가 전혀 실행되지 않으면 단일 CPU에서 실행된다는 것을 확신 할 수 있습니다.

실행 시간을 계산할 때 GetThreadTimes가 올바른 API입니다. 당신은 (이론적) CPU의 몇 퍼센트 프로세스가 사용한하려면, 모든 CPU가 같은 속도를 가지고, 물론

(kerneltime+usertime)/(now - starttime)/numberofcpus 

이 공식은 가정을 계산한다. 당신이 스레드가 최근 소비 것을 CPU 부분을 표시 할 경우 모든 두 번째, 지금은 이전의 약 1 할 것 샘플 경우 샘플 GetThreadTimes 모든 초, 다음

(usedtimenow - usedtimeprevious)/(now - previous)/numberofcpus 

를 계산,하지만 당신은 샘플링 시간을 기록한다 어쨌든 - 시스템은 샘플 사이에 정확히 1 초 동안 잠을 자지 못하게합니다.

관련 문제