'QueryPerformanceCounter'에 해당되는 글 1건

  1. 2008.04.09 [winapi] - 정밀한 시간측정...

현재 window api에서 제공되는 가장 정밀한 측정을 할 수 있다. 하지만 그만큼 부하가 크다. 그리고 하드웨어 적으로도 지원이 되어야한다.
일반적으로 시간을 측정할때 쓰는 함수임  timeGetTime()이나 GetTickCount()같은 경우 ms(millisecond)까지의 정확도를 보여준다. 하지만 아래의 두함수 QueryPerformanceFrequency와 QueryPerformanceCounter()를 이용하게 되면 us(microsecond)까지의 측정이 가능하다.

QueryPerformanceFrequecy 함수를 보면
BOOL QueryPerformanceFrequency(  LARGE_INTEGER *lpFrequency   );
parameter로 받은값에 현재 컴퓨터의 초당 tick수를 뱉어낸다. 자신의 컴퓨터하드웨어가 고해상도 타이머를 지원하지 않을겨우에는 false를 반환한다.

QueryPerformanceCounter함수는
BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount);
parameter로 받은값에다가 컴퓨터가 부팅후 지나간tick수를 반한해준다.

그래서 이두함수를 이용하게 되면

LARGE_INTEGER start, end, count;

QueryPerformanceFrequency(&count);
QueryPerformanceCounter(&start);
//수행 시간을 측정할 작업..
QueryPerformanceCounter(&end);

passtime = end.QuadPart - start.QuadPart  / count.QuadPart

passtime * 1000(ms)
passtime * 1000000(us)

하지만 정밀한 측정을 하기에 무조건 좋은것은 아니다. 일부 메인보드 칩센에서 시간이 건너 뛴다거나 하드웨어적인 지원 유무등 문제가 있기때문에 유연한 코드가 필요할듯 하다.

Posted by hazeyun

댓글을 달아 주세요