Time
을 초기화해야합니다. getttimeofday
이 실패하면 perror
다음에 반환해야합니다. 따라서 시도하십시오 :
int64_t gettimelocal() {
struct timeval Time = {0,0};
if(-1 == gettimeofday(&Time,NULL)) {
perror("gettimeofday");
return -1;
}
// get time in micro seconds
return (((int64_t)Time.tv_sec * 1000000) + Time.tv_usec);
}
마지막으로 곱셈이 오버플로되지 않았습니까? 곱셈이 64 비트로 이루어 지도록 캐스트를 원한다.
static inline double my_clock_time (clockid_t cid) {
struct timespec ts = { 0, 0 };
if (clock_gettime (cid, &ts))
return NAN;
else
return (double) ts.tv_sec + 1.0e-9 * ts.tv_nsec;
}
및 my_clock_time(CLOCK_REALTIME)
읽기
printf ("now %.5f\n", my_clock_time(CLOCK_REALTIME));
처럼 조심스럽게
time(7) 전화 :
사실,이 같은 clock_gettime(3)와 double
부동 소수점을 사용하는 것이 좋습니다 것입니다. 나노초 정확도를 기대하지 마십시오!
모든 경고와 디버그 정보 (예 : gcc -Wall -g
)로 코드를 컴파일하십시오. 디버거 (gdb
) 및 아마도 strace(1)
편집하여 질문을 형식화하십시오. 읽을 수 없다! 코드에는 적어도 네 개의 공백으로 시작하는 줄을 사용하십시오. –
'(Time.tv_sec * 1000000)'- 플랫폼에 따라 가능한 정수 오버플로입니다. –
어떻게 표시하나요? % d이 (가) 있습니까? % ld 또는 sth와 비슷하게 시도하십시오. – jaroslawj