일반적으로 시간을 구하는 함수는 많은데, 일반적으로 그 정밀도가 수십 밀리세컨드로 정밀한 시간차이를 구하기 위해서 사용하기에는 적절하지 않습니다.
clock_gettime 함수는 리눅스 환경에서 코딩할때 특정 구간내에서 실행되는 코드의 정밀한 시간차를 구하려고 할 때 사용할 수 있는 함수 입니다. clock_gettime 함수는 나노초 단위까지의 시간을 구할 수 있다고 합니다.
참고로 SI 단위에서 사용되는 단위와 그 정밀도는 아래와 같습니다.
기호 |
단위 |
의미 |
m |
milli |
10-3 |
µ |
micro |
10-6 |
n |
nano |
10-9 |
clock_gettime 함수에 대한 자세한 설명은 구글에서 검색하면 다양한 소스 코드가 나옵니다.
이 함수에서 리턴하는 구조체 형태는 아래와 같습니다. 주석에서 볼 수 있듯이 나노단위의 리턴값을 갖습니다.
struct timespec
{
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
아래 소스는 clock_gettime 함수를 적용해서 만들어본 샘플 코드입니다. 주 기능은 특정 구간 앞뒤에서 호출하여 시간차이 값을 계산해서 리턴해줍니다.
단순 참고용으로 작성되었기 때문에 실전(?)에서 활용하기 위해서는 적절히 수정하면 될 것 같습니다.
참고로 아래 코드는 리턴값으로 밀리 세컨드를 얻기위해 리전 직전에 1,000,000으로 나누어 주었습니다.
일반적인 용도로 밀리 세컨드(ms) 정도의 해상도(정밀도)면 사용하기에 적절할 것 같습니다.
만약 마이크로 세컨드(µs)의 해상도로 시간차를 얻고 싶다면 1,000 으로 나누어 주면 됩니다.
#include <time.h>
int main()
{
GetTimeDiff(0);
for(int i=0;i<100;i++)
DoSomeThing();
printf("Elapsed Time : %lld \n", GetTimeDiff(1) );
}
{
const long long NANOS = 1000000000LL;
static struct timespec startTS, endTS;
static long long retDiff = 0;
{
retDiff = 0;
if(-1 == clock_gettime(CLOCK_MONOTONIC, &startTS))
else
{
if(-1 == clock_gettime(CLOCK_MONOTONIC, &endTS))
}
}
틀린 부분/의견은 댓글로 부탁드립니다.
'COMPUTING' 카테고리의 다른 글
크롬(Chrome) 에서 Flash 기능 끄기 - 랜섬웨어 대비(!?) (0) | 2015.12.11 |
---|---|
[MSDN] Static(C++) 키워드 정의, 기능 (0) | 2015.10.15 |
(초보자를 위한) 리눅스 vi 편집기 자주쓰는 단축키 모음 - 업데이트 중 (0) | 2015.06.17 |
[리눅스] find와 grep을 이용해서 특정 파일 내용 검색하기 (0) | 2015.01.24 |
[VMWare] 오류 해결 - This host supports Intel VT-x, but Inter VT-x is disabled. (13) | 2015.01.16 |