2011-02-25 10 views
0

내 (Delphi XE) 응용 프로그램에서 각 (최대 200 개) 스레드의 CPU 사용률을 얻으려고합니다. 이를 위해 PdhExpandWildCardPath에 문자열 '\Thread(myappname/*)\% Processor Time'을 전달합니다. 그러나 (Win7/64에서)이 함수에서 반환 된 버퍼는 시스템에서 실행중인 모든 스레드에 대한 문자열을 반환합니다. 즉, 입력을 마치 '\Thread(*/*)\% Processor Time' 인 것처럼 처리 한 것으로 보입니다. 이것은 예상치 못한 일입니다. 이후에 'ID Thread'를 얻기 위해 문자열을 확장 할 때도 마찬가지입니다.PdhExpandWildCardPath가 너무 많은 경로를 반환합니다.

분명히 결과 문자열을 응용 프로그램 이름으로 필터링하고 필요한 카운터 만 추가 할 수 있지만 수백 개의 부분 문자열 검색이 필요합니다. 와일드 카드가 어떻게 작동하는지 잘못 해석 했습니까? 여기

그것은 다음과 같습니다 :

+0

자신의 프로세스에서 스레드를 열거하고 이름을 그렇게 쉽게 구성하지 않을까요? –

+0

각 스레드마다 GetThreadTimes를 사용하지 않는 이유는 무엇입니까? – Misha

+0

@ David : 게으름, 나는 이미 와일드 카드 코드를 완성했습니다. 하지만 고마워, 이제 스레드를 먼저 열거하도록 코드를 변경했으며 속도가 훨씬 빨라졌습니다. 그리고 와일드 카드 확장이 이상하다고 생각합니다. – frogb

답변

0

늦은하지만이 같은 벽에 부딪했습니다, 다른 어쩌면 누군가가 그것을 필요로 '\Thread(myappname*)\% Processor Time' 특히 2로 설정 ProcessNameFormat에 유용하고 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance'

2로 설정 ThreadNameFormat

ProcessNameFormat = 2 ->link의 경우 ThreadNameFormat에도 동일하게 적용되지만 모든 종류의 설명서는 찾을 수 없습니다.

+0

나를 위해 너무 늦었지만, 다시 필요할 때 미리 감사드립니다! – frogb

관련 문제