버튼을 클릭하면 열심히 계산을 시작해서
계산값을 출력해주는 프로그램이 있다고 했을때
만약 그 프로그램 안에 For루프가 많아서 시간이 꽤 많이 걸린다고 가정해봅니다.
그런 경우에 출력값이 나오기까지 걸리는 시간이 얼마나 걸렸는지 알아낼려면
어떻게 해주면 좋을까요?
물론 모니터에 붙어 앉아서 스톱워치로 재면 되기야 되겠지만......-_-;;;
Now 함수로 계산 시작전의 시간을 구해 놓고, 계산이 끝난 후의 시간을 서로 비교하면, 계산이 끝나는데까지 걸린 시간을 구할 수 있죠.
Now 함수의 반환값이 TDateTime 형이라서, 계산하려면 약간 복잡해 지는데요.. 저는 이런 경우 GetTickCount 라는 API를 사용합니다. 물론 멀티 쓰레드 환경하에서 사용하는데는 무리가 있지만, 간단하게 계산하는데 걸리는 시간등을 구하는데는 매우 유용하게 사용할 수 있으리라 생각됩니다.
GetTickCount API를 이용하는 경우에도 위의 Now와 마찬가지로 적용하면 되겠지요. 계산 시작전에 GetTickCount로 시작 시간을 구해놓고, 계산이 종료된 후에 GetTickCount 값을 구해서 두 값의 차를 계산하면 되겠지요.
참, GetTickCount는 피씨가 켜진때부터(운영체제가 시작된 때부터) 1ms마다 1씩 증가하게 됩니다. 1초면 1000이 증가하게 되는 거죠.
Now 함수로 계산 시작전의 시간을 구해 놓고, 계산이 끝난 후의 시간을 서로 비교하면, 계산이 끝나는데까지 걸린 시간을 구할 수 있죠.
Now 함수의 반환값이 TDateTime 형이라서, 계산하려면 약간 복잡해 지는데요.. 저는 이런 경우 GetTickCount 라는 API를 사용합니다. 물론 멀티 쓰레드 환경하에서 사용하는데는 무리가 있지만, 간단하게 계산하는데 걸리는 시간등을 구하는데는 매우 유용하게 사용할 수 있으리라 생각됩니다.
GetTickCount API를 이용하는 경우에도 위의 Now와 마찬가지로 적용하면 되겠지요. 계산 시작전에 GetTickCount로 시작 시간을 구해놓고, 계산이 종료된 후에 GetTickCount 값을 구해서 두 값의 차를 계산하면 되겠지요.
참, GetTickCount는 피씨가 켜진때부터(운영체제가 시작된 때부터) 1ms마다 1씩 증가하게 됩니다. 1초면 1000이 증가하게 되는 거죠.
간단한 예...
var
dwStart, dwEnd:DWORD;
...
dwStart:=GetTickCount;
Compute;
dwEnd:=GetTickCount;
ShowMessage('계산하는데 걸린시간 = '+IntToStr(dwEnd-dwStart)+'ms 입니다.');
그럼, 즐푸~