timeGetTime() GettickCount() 함수 총정리
- 프로그래밍/WindowsAPI
- 2011. 6. 13. 13:09
timeGetTime(), GettickCount()에 대해서 총정리
1.timeGetTime() 함수?
윈도우(운영체제)가 시작되어서 지금까지 흐른 시간을 1/1000 초 (milliseconds) 단위로 DWORD형을 리턴하는 함수다.
ex)
만일 윈도우가 뜨고 1분이 지났다면 이 함수는 60,000을 리턴. (부팅 시간은 제외)
2.사용하기
timeGetTime()를 사용하고 싶으면 #include <windows.h> 를 선언해준다.
물론 winmm.lib도 링크시켜야 한다.
방법1. Visual Studio 상단메뉴에서 프로젝트(P) - 속성(P) - 구성속성 - 링커 - 입력으로 들어가 추가종속성에 추가.
방법2. #pragma comment(lib, "winmm.lib") 를 선언
3.구현
이제 timeGetTime()의 세계로 빠져보자!
시간을 초(second)단위로 얻고 싶다면
DWORD t = timeGetTime() / 1000; 또는 DWORD t = timeGetTime() * 0.001f;
위의 방법을 이용하면 된다.
예를 들어 0.1초 단위로 실행하고 싶은 함수 AAA()가 있다면 시작과 동시에 한번만 시작시간을 얻고
//시작부분
float m_fStartTime = (float)timeGetTime() * 0.001f; //초단위로 바꿔줌
float m_fStartTime = (float)timeGetTime() * 0.001f; //초단위로 바꿔줌
//루프
float NowTime = (float)timeGetTime() * 0.001f; //초단위로 바꿔줌
if( NowTime-m_fStartTime >= 0.1f) // 여기서 0.1 은 0.1초마다 실행을 의미
{
//함수실행
AAA();
}
m_fStartTime = NowTime;
m_fStartTime = NowTime;
위의 방법을 이용해서 얻은 시간데이터를 시,분,초 단위로 변경할 수 있다.
DWORD Hour = (NowTime/60/60)%60;
DWORD Minute = (NowTime/60)%60;
DWORD Second = NowTime%60;
2.GetTickCount() 함수.
GetTickCount()란?
DWORD GetTickCount(VOID);
=> OS부팅할 때부터 지나간 시간을 msec 단위로 돌려주는 함수이다.
윈도우즈는 부팅된 후 1초에 1000씩 틱 카운트를 증가시키는데 이 함수를 사용하면 부팅된지 얼마나 경과했는지를 알 수 있다. 카운트는 32비트값이므로 최대 49.7일간의 카운트를 유지할 수 있다. 주로 두 사건 사이의 경과 시간을 측정하기 위한 용도로 사용하며 또는 간단한 애니메이션, 커스텀 커서의 깜박임 주기 조정 등의 용도로도 사용할 수 있다. 이 함수보다 더 정밀한 시간을 측정할 필요가 있을 때는 멀티미디어 타이머나 고해상도 타이머를 사용해야 한다.
예제1) 시간 얻기
//window.h나 afxwin.h include
#include <iostream><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = o />
#include <conio.h>
#include <afxwin.h>
#include <cstring>
using std::endl; using std::cout;
#define NUM 1000
void main()
{
unsigned long startT = GetTickCount64();
DWORD startTD = GetTickCount64();
cout<< startT <<endl;
cout<<startTD<<endl;
//프로그래밍 루프들~( 시간 소요 )
//프로그래밍 루프들~( 시간 소요 )
unsigned long endT = GetTickCount64();
cout<<endT<<endl;
puts("\n");
int DletaT = endT- startT;
cout<<DletaT<<endl;
long dSec = (DletaT/1000);
int dMin =(dSec%3600)/60;
int dHour = dSec/3600;;
CString str;
str.Format("Access Time: %d시간 %d분 %d초", dHour, dMin, dSec%60);
cout<<str<<endl;
getch();
}
예제2)GetTickCount()를 사용하여 딜레이 주기
#include <stdio.h>
#include <windows.h>
void main()
{
while(1)
{
int StartTime;
StartTime = GetTickCount();
while(GetTickCount() - StartTime >= 1000);
{
printf ("1초마다 한번씩 실행됩니다\n");
}
else
{
//딜레이를 주는 부분
}
{
printf ("1초마다 한번씩 실행됩니다\n");
}
else
{
//딜레이를 주는 부분
}
}
}
GetTickCount() 함수는 마이크로 초마다 시간값을 받아온다.
즉!!!! StartTime값에 시간값을 저장한 후 새로 값을 받아올때에의 GetTickCount값이 증가하기때문에
GetTickCount() 에서 a를 뺀 값이 1000보다 클때. 즉 1초보다 작을때까진 while-else문을 돌게 된다
즉 그만큼의 딜레이가 발생한다
이 글을 공유하기