Programming

Sleep(), GetTickCount(), Timer ㅜㅜ

굿쏘 2013. 6. 14. 19:46

아무생각없이 쓰다가 대략 난감해지는 우리의 Timer

이 녀석은 정말 대단하다 처음엔 잘돌아가는듯 눈속임을 하다가 윈도우가 바뻐지면 자기도 바뻐져서 이벤트를 발생하지 않는다. 또는 지 맘대로 늦어진다. 잘되다 안되다 디버깅하기 정말 어려운 문제발생.

 

Sleep() 얘는 millisecond 단위로 조작이 가능하지만 실제로는 엄청난 오차를 가지고 있는 놈이다.

   1:  Sleep(1);
   2:  Sleep(10);

이 두개는 별차이 없다 얼만큼 잘지도 모르고 그냥 운명에 맡겨야할 정도다.

 

   1:  GetTickCount();

millisecond도 관리못하는 윈도우가 Tick!!! 이라니..웃긴다 그저.

 

   1:  LARGE_INTEGER freq = {0,};
   2:  LARGE_INTEGER beforeCount = {0,};
   3:  LARGE_INTEGER afterCount = {0,};
   4:  LARGE_INTEGER thirdCount = {0,};
   5:   
   6:  QueryPerformanceFrequency(&freq);
   7:   
   8:  QueryPerformanceCounter(&beforeCount);
   9:  Sleep(10);
  10:  QueryPerformanceCounter(&afterCount);
  11:  double timeBusy = (double)(afterCount.QuadPart - beforeCount.QuadPart) / freq.QuadPart;
  12:  printf("timeBusy = %g(msec)\n", timeBusy * 1000);
  13:  Sleep(1);
  14:  QueryPerformanceCounter(&thirdCount);
  15:  double timeDelay = (double)(thirdCount.QuadPart - afterCount.QuadPart) / freq.QuadPart;
  16:  printf("timeDelay = %g(msec)\n", timeDelay * 1000);

 

결과가 궁금하면 돌려봐야징~~