我有时会在代码下面得到负值。 我不明白这一点。任何人都可以解释为什么会这样。
int64_t gettimelocal()
{
struct timeval Time;
if(-1 == gettimeofday(&Time,NULL))
{
perror("gettimeofday");
}
// get time in micro seconds
return ((Time.tv_sec * 1000000) + Time.tc_usec);
}
答案 0 :(得分:1)
为安全起见,您应该初始化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位完成的。
实际上,我建议使用double
浮点数和clock_gettime(3)这样:
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)。不要指望纳秒精度!
使用所有警告和调试信息(例如gcc -Wall -g
)编译代码。使用调试器(gdb
)和strace(1)