C ++计算时间间隔

时间:2012-08-18 17:58:49

标签: c++ unix time g++ clock

我想计算程序中发生的某些事件之间的时间间隔(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,程序每秒只打印一次,那么它只打印0 ...

非常感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

clock()函数返回向程序收取的CPU时间量。如果您在usleep()电话中被阻止,则不会向您收取任何时间,因此非常清楚为什么您的时间似乎永远不会增加。至于为什么你似乎需要花费8秒才能充电一秒钟 - 你的系统中还有其他的事情正在发生,消耗你希望消耗的CPU时间,但你必须共享处理器。 clock()不能用来衡量实时的通过。

答案 1 :(得分:1)

我打赌你的印刷很多,以至于老版画被缓冲了。缓冲区正在增长,控制台的输出跟不上你的紧密循环。通过添加睡眠,您可以让缓冲区有一段时间进行冲洗和追赶。所以即使你的程序有8秒钟,你的印刷品也是从8秒前开始的。

我建议将实际时间戳放入print语句中。查看时间戳是否与实际时间相比显着滞后。

答案 2 :(得分:1)

如果您能够使用提升,请检查Boost Timers库。

答案 3 :(得分:0)

也许你必须将它强制转换为双倍。

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

整数被四舍五入,在你的情况下可能为0。

答案 4 :(得分:0)

了解time()功能。