문제

주어진 Win32 스레드로 CPU 사용을 계산 해야하는 getsystemtime ()과 getThreadTimes ()가 두 개의 시스템 호출이 있습니다.

정확성을 위해 getSystemTime ()와 getThreadTimes ()가 모두 원자 적으로 실행되도록해야합니다. 즉, getSystemTime () & getTheRdreadTimes ()에 대한 호출 사이에 컨텍스트 스위치가 없어야합니다.

그 이유는 때때로 100% 이상의 비율 (500 분의 ~ 1)으로 끝나기 때문입니다.

두 기능 호출의 원자 실행을 어떻게 보장 할 수 있습니까?

감사합니다, Sachin

도움이 되었습니까?

해결책

가장 좋은 방법은 컴퓨팅 스레드를 실시간 우선 순위로 할당하는 것입니다. 실시간 스레드는 다른 실시간 스레드에 의해서만 선점됩니다 (또는 실시간 우선 순위로 향상됨).

다른 팁

나는 당신이 할 수 있는지 확실하지 않습니다. 각 기능에서 기본 작업이 무엇인지 알지 못하고 Windows API 호출이 발생하기 때문에 행운을 빕니다.

100을 초과하는 백분율 만 조정하는 것이 불가능합니까?

perc = ( perc > 100.0f ) ? 100.0f : perc;

슬프게도 방법이 없습니다. Win32의 두 시스템 호출 사이에는 프로세스/스레드가 컨텍스트가 전환되는 것을 방지 할 방법이 없습니다. 그렇지 않으면 누군가가 모든 전환을 거부함으로써 시스템을 잠그는 프로세스를 구현하는 것은 사소한 일입니다.

반대 순서로 기능을 호출하면 도움이됩니까? (99%가 101%보다 낫습니다 ...)

또한이 작업을 수행하기 직전에 컨텍스트 스위치를 강요하는 경우 (예 : Sleep ()에게 호출)를 사용하면 전환 할 가능성이 줄어 듭니다. 그래도 그것이 얼마나 잘 작동하는지 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top