C ++计算的时间间隔(C++ calculating time intervals)

2019-07-31 01:39发布

我想一些事件在我的计划发生之间计算时间间隔(1秒的1/10)。 因此,我用clock功能,针对这些需求像如下:

    clock_t begin;
    clock_t now;
    clock_t diff;

    begin = clock();

    while ( 1 )
    {
        now = clock();
        diff = now - begin;
        cout << diff / CLOCKS_PER_SEC << "\n";
        //usleep ( 1000000 );
    };

我期望程序打印0 1秒,然后1 1秒,则2 1秒。 等等...事实上它打印0约8秒钟,然后1约8秒钟等等...

顺便说一句,如果我添加usleep为了程序打印每秒只有1次,只会打印0一路长...

大感谢您的帮助!

Answer 1:

clock()函数返回的收取你的程序的CPU时间。 当您被封锁一个内部usleep()呼叫,没有时间正在向您收取,使得它非常清楚为什么你的时间似乎永远不会增加。 至于为什么你似乎都采取了8秒收取1秒 - 还有其他的东西你的系统中去的,耗费CPU的时间,你会喜欢被消耗,但你必须共享处理器。 clock()不能被用于测量真实时间的流逝。



Answer 2:

我敢打赌,你的打印这么多到stdout老版画得到缓冲。 该缓冲区增长,输出到控制台无法与您紧密循环跟上。 通过增加睡眠你允许缓冲一段时间刷新,迎头赶上。 所以,即使其8秒进入程序,8秒前您的打印材料。

我建议把实际的时间戳到print语句。 看看时间戳显著从实际时间滞后。



Answer 3:

如果你能够使用升压,检出升压定时器库。



Answer 4:

也许你不得不强制转换它的两倍。

cout << (double)(diff / CLOCKS_PER_SEC) << "\n";

整数获得圆润,可能是0,你的情况。



Answer 5:

阅读关于time()函数。



文章来源: C++ calculating time intervals