gpt4 book ai didi

linux - gettimeofday() 有时返回负值

转载 作者:太空宇宙 更新时间:2023-11-04 11:05:04 25 4
gpt4 key购买 nike

对于以下代码,我有时会得到负值。我不明白这一点。任何人都可以解释为什么会发生这种情况。

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);
}

最佳答案

为了安全起见,您应该初始化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 float 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)

关于linux - gettimeofday() 有时返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com