timeGetTime() GettickCount() 함수 총정리

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 NowTime = (float)timeGetTime() * 0.001f;    //초단위로 바꿔줌
 
if( NowTime-m_fStartTime >=  0.1f)   // 여기서 0.1 은 0.1초마다 실행을 의미
{
     //함수실행
     AAA();
}

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
                {
                //딜레이를 주는 부분
                 }     
          }
}
 
 
GetTickCount() 함수는 마이크로 초마다 시간값을 받아온다.
즉!!!! StartTime값에 시간값을 저장한 후 새로 값을 받아올때에의 GetTickCount값이 증가하기때문에
GetTickCount() 에서 a를 뺀 값이 1000보다 클때. 즉 1초보다 작을때까진 while-else문을 돌게 된다
즉 그만큼의 딜레이가 발생한다


이 글을 공유하기

댓글

Designed by JB FACTORY