为了安全起见,您应该初始化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)
请通过编辑来更好地格式化您的问题。这是不可读的!使用以至少四个空格开头的行代码。 – 2014-09-01 11:40:48
'(Time.tv_sec * 1000000)'< - 可能的整数溢出,取决于您的平台。 – 2014-09-01 11:43:08
你如何显示它?与%d?尝试%ld或者类似。 – jaroslawj 2014-09-01 11:45:29