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 |