[질문] 시간함수 clock_gettime() 와 관련하여 tv_nsec 의 범위
안녕하세요,
전문가님들의 조언을 얻고자 합니다.
시간 함수를 가지고 키값을 생성하는 함수가 있는데요, 기존에는 단순히
gettimeofday() 함수를 사용해서 밀리세컨 단위로 키값을 설정해도 충분히 중복되지 않고
쓸 수 있었습니다만, 동시 처리량이 많아지면서 키가 중복되어 버리는 현상이 발생했습니다.
기존 tv_sec 의 1,000,000 표현범위보다 더 정밀한
clock_gettime() 의 tv_nsec를 사용하려고 했습니다.
뒤져보니 1,000,000,000 까지의 정밀하다고 하더군요,,
테스트로 대충 만들어서 돌려보았습니다.
#include <stdio.h> #include <stdlib.h> #include <time.h> main() { struct timespec sCurNanoTimeVal; int rtn, i; for(i=0; i<1000 ; i++){ rtn = clock_gettime(CLOCK_REALTIME, &sCurNanoTimeVal); printf("[i:%06d] %ld %ld\n", i, sCurNanoTimeVal.tv_sec, sCurNanoTimeVal.tv_nsec); rtn = clock_gettime(CLOCK_REALTIME, &sCurNanoTimeVal); printf("[i:%06d] %ld %ld \n--\n", i, sCurNanoTimeVal.tv_sec, sCurNanoTimeVal.tv_nsec); } return 0; }
로 돌려보았습니다만
결과는
----------------------------
tv_sec tv_nsec
--
[i:000994] 1307087854 806747000
[i:000994] 1307087854 806748000
--
[i:000995] 1307087854 806749000
[i:000995] 1307087854 806750000
--
[i:000996] 1307087854 806750000
[i:000996] 1307087854 806751000
--
[i:000997] 1307087854 806752000
[i:000997] 1307087854 806753000
--
[i:000998] 1307087854 806754000
[i:000998] 1307087854 806755000
--
[i:000999] 1307087854 806756000
[i:000999] 1307087854 806757000
--
-------------------------------------------------
로 tv_nsec 가 6자리로 표현되고 뒤에 000로 처리되더군요..
6자리만 사용한다면 기존에 밀리세컨으로도 사용할 수 있습니다만, 제가 원하는건 더 정밀한 값이 필요합니다.
아무리 찾아도 현재 값에 계산을 넣지 않으면,
6자리 이상 표현하게 하는 방법을 못찾았습니다.
TIME의 전문가님들!! 프로그램의 전문가님의 조언이 필요해요 ㅜㅜ
부디.... 저에게 한줄기 희망을.......................
감사합니다..
아무런 수정없이 컴파일해서 돌려보니깐,
아무런 수정없이 컴파일해서 돌려보니깐, 잘되는데요?
커널의 real-time clock과 관련된 부분 옵션을 한번 체크해보시는게 어떨지..
[Device Drivers] -> [Real Time Clock]
댓글 달기