Windows 시스템에서 마이크로초(1/10^6) 단위 함수 구현
    - C++ code, Get MicroTime Funtion from API

* 걸린시간(속도 측정용)
    QueryPerformanceFrequency(), QueryPerformanceCounter()
    를 사용해서 걸린시간 측정용 마이크로초를 구할수는 있지만
    현재시간의 마이크로초는 구할수는 없다.

* 밀리초
    _ftime()이나 GetSystemTimeAsFileTime() 함수를 통해 구할수 있다.



* 마이크로초

    - Linux는 gettimeofday()를 통해 가능
    - _ftime(), GetSystemTimeAsFileTime() 함수를 통해 구할수 있지만
    정확도는 밀리초와 같다(밀리초와 연동됨), 의미 없음

    - Windows 8 부터 GetSystemTimePreciseAsFileTime function() 함수를 통해 구할수 있음
        - 자체 오버헤드 문제로 속도가 느리다고 함

    - Windows Timestamp Project       
        http://www.windowstimestamp.com/description
        - Microsecond Resolution Time Services for Windows
        - 결국 여기서도 서비스를 통해 구현
        - service 소스는 공개하지 않음
   

- Windows 7 이하에서 기본함수를 이용해 구현하는 간단한 방법은 아직 못찾음 ㅠ.ㅠ


//===================

//source code(소스코드)
//시간 : 밀리초
UINT64 GetMilTime( )
{   
    UINT64 tmRet0 = 0;
    _timeb tb; _ftime(&tb);

    tmRet0 = tb.time*1000 + tb.millitm ;
    return tmRet0;
}   

//
//시간 : 마이크로초, 정확도는 밀리초, 소용없는 함수
UINT64 GetMicroTime()
{   
    FILETIME ft;
    GetSystemTimeAsFileTime(&ft);

    unsigned long long tt = ft.dwHighDateTime;

    tt <<=32;
    tt |= ft.dwLowDateTime;
    tt /=10;
    tt -= 11644473600000000ULL;

    return tt;
}


//=================================================
// 아래부터는 걸린시간 측정용
//CPU Tick
UINT64 GetCpuTick()
{
    LARGE_INTEGER tick; QueryPerformanceCounter(&tick);
    return tick.QuadPart;
}


//마이크로틱
UINT64 GetMicroTick()
{
    double uMicroSec =0;
    LARGE_INTEGER tickPerSecond;   

    if( QueryPerformanceFrequency(&tickPerSecond) ){//초당 주파수
        LARGE_INTEGER tick; QueryPerformanceCounter(&tick);//CPU tick 카운터
        uMicroSec = (((tick.QuadPart*1000000.0) / tickPerSecond.QuadPart));// 밀리초는 1000.0 (10^3)을 곱한다
    }

    return (UINT64)uMicroSec;
}


반응형

'Code > Desktop' 카테고리의 다른 글

Codeproject Network Library  (0) 2014.01.28
Boost 라이브러리 설치  (2) 2014.01.26
OpenCV + IPP + TBB 사용법  (0) 2014.01.20
Intel IPP 사용법  (0) 2014.01.19
Intel TBB 사용법  (0) 2014.01.19
Posted by codens