usec가 마이크로세컨드(1/1000000초)를 말씀하시는건가요?
그렇다면 고해상도 성능 카운터 함수를 사용하시면 됩니다.
QueryPerformanceFrequency
QueryPerformanceCounter
#include
#include
void WorkIdle()
{
int a = 0;
a = a + 1;
}
void WorkBusy()
{
int a = 0;
for(int i=0; i<1000000000; ++i)
a = a + 1;
}
int main()
{
LARGE_INTEGER freq; // 주파수
LARGE_INTEGER beforeCount; // 전카운트
LARGE_INTEGER afterCount; // 후카운트
double timeBusy, timeIdle;
// 주파수측정함수는 '고해상도 성능 카운터'가 1초에 몇번 카운팅 하는지를 구해줍니다.
// 시스템성능에 따라 차이가 있으므로 구해주는겁니다.
// 한번만 구해놓고 계속 참조하면 됩니다.
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&beforeCount); // 일하기 전 카운트를 구합니다.
WorkIdle(); // 일을 합니다.
QueryPerformanceCounter(&afterCount); // 일한 후 카운트를 구합니다.
// 경과시간 계산은 일하는 동안 증가된 카운트를 주파수로 나눠주면 됩니다.
timeIdle = (double)(afterCount.QuadPart - beforeCount.QuadPart) / freq.QuadPart;
QueryPerformanceCounter(&beforeCount);
WorkBusy();
QueryPerformanceCounter(&afterCount);
timeBusy = (double)(afterCount.QuadPart - beforeCount.QuadPart) / freq.QuadPart;
printf("WorkIdle time : %g(sec) = %g(usec)\n", timeIdle, timeIdle*1000000);
printf("WorkBusy time : %g(sec) = %g(usec)\n", timeBusy, timeBusy*1000000);
getchar();
return 0;
}
|