我想计算程序中发生的某些事件之间的时间间隔(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
...
非常感谢您的帮助!
答案 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()
功能。