2
/*
 * Returns time in s.usec
 */
float mtime()
{
    struct timeval stime;
    gettimeofday(&stime,0x0);
    return (float)stime.tv_sec+((float)stime.tv_usec)/1000000000;
}

main(){
    while(true){
        cout<<setprecision(15)<<mtime()<<endl;
        // shows the same time irregularly for some reason and can mess up triggers
        usleep(500000);
    }
}

为什么它不规则地显示相同的时间?(在 ubuntu 64 位和 C++ 上编译)还有哪些其他标准方法可用于生成毫秒精度的 unix 时间戳?

4

2 回答 2

4

Afloat具有6 到 9 位精度的十进制数字

因此,如果整数部分是例如 1,391,432,494(我写这篇文章时的 UNIX 时间;需要 10 位数字),那么小数部分的数字已经用完了。不太好,这就是为什么float失败的原因。

跳到double 给你 15 位数字,所以只要你可以假设整数部分是 UNIX 时间戳,即自 1970 年以来的秒数,这似乎就足够了,因为这意味着它不可能很快使用更多的数字。

于 2014-02-03T12:56:47.753 回答
0

似乎 float 没有足够的精度,用 double 代替,现在一切正常。

/*
 * Returns time in s.usec
 */
double mtime()
{
    struct timeval stime;
    gettimeofday(&stime,0x0);
    return (double)stime.tv_sec+((double)stime.tv_usec)/1000000000;
}

仍然不完全理解随机行为的原因...... PS。我正在捕获一个 mtime() 并将其与当前时间进行比较以获得持续时间。

于 2014-02-03T12:52:45.093 回答