2

我想计算程序中发生的一些事件之间的时间间隔(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 );
    };

我希望程序打印01 秒,然后打印 1 秒1,然后打印21 秒。依此类推……实际上它打印0了大约 8 秒,然后打印了大约 8 秒,1依此类推……

顺便说一句,如果我添加usleep命令程序每秒只打印 1 次,它只会打印0很长时间......

非常感谢您的帮助!

4

5 回答 5

2

clock()函数返回为您的程序收取的 CPU 时间量。当您在usleep()通话中被阻止时,不会向您收取任何时间,这很清楚为什么您的时间似乎从未增加。至于为什么您似乎要花 8 秒来收取一秒的费用——您的系统内还有其他事情正在发生,消耗您想要消耗的 CPU 时间,但您必须共享处理器。clock()不能用来衡量实时的流逝。

于 2012-08-18T18:05:14.557 回答
1

如果您能够使用 boost,请查看Boost Timers库。

于 2012-08-18T19:39:51.817 回答
1

我敢打赌,您的打印对标准输出非常重要,以至于旧打印正在缓冲。缓冲区正在增长,控制台的输出跟不上您的紧密循环。通过添加睡眠,您可以让缓冲区有时间刷新和赶上。因此,即使它进入您的程序 8 秒,您的打印内容也是 8 秒前的。

我建议将实际时间戳放入打印语句中。查看时间戳是否明显滞后于实际时间。

于 2012-08-18T18:03:35.110 回答
0

也许您必须将其类型转换为加倍。

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

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

于 2012-08-18T18:01:15.173 回答
0

阅读有关该time()功能的信息。

于 2012-08-18T19:15:15.833 回答