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);
결과가 궁금하면 돌려봐야징~~