我试图编写一个Timer类(不知道boost有一个),然后当它不起作用时,我试图输出clock()的值,使用这段代码:
#include <ctime>
#include <iostream>
int main()
{
for(int i = 0; i < 50; ++i)
{
std::cout << std::clock() << " ";
}
return 0;
}
当我运行程序时,我得到一系列的0。我在使用提升线程休眠功能将时间延长一段时间时有类似的经验(尽管在几秒钟之后,它会从0跳到10,000并保持输出10,000)。
我正在运行Gentoo Linux。这是平台吗?一个C ++的东西?发生了什么事?
编辑:奇怪的是,跳转到10000后会出现一些秒,而不是几毫秒。当我一次睡觉我的线程一秒钟时,花了五六秒才达到10000.但是,如果我理解正确的话。线程花费的时间对clock()计数没有贡献? (哪个有意义;为什么它会在睡觉时执行时钟周期?)
答案 0 :(得分:6)
clock()
返回值以微秒为单位指定。但clock()
实现使用的任何低级系统调用的典型粒度要低得多。因此,在您的系统上,似乎粒度为10毫秒。另请注意,clock()
执行 NOT 测量实时 - 它会测量程序使用的CPU时间。因此,当程序控制CPU时,时间会流动,并且当程序暂停时它会冻结 - 例如,睡眠状态。
答案 1 :(得分:0)
std::clock
的决议未指明。在大多数情况下,它的分辨率约为10ms
。因此跳跃。
答案 2 :(得分:0)
尝试以下方法:
#include <ctime> #include <iostream> int main() { for(int i = 0; i < 50; ++i) { for (int j = 0; j < 500; ++j ) { std::cout << j << " "; } std::cout << std::endl; std::cout << std::clock() << std::endl; } std::cout << std::endl; return 0; }
在我的系统上,我看到clock()的返回值保持为0,直到某个时刻它跳到10000.它一直保持到10000。如果我删除内部循环中的std :: cout,则clock()的返回值始终保持为0。看起来像clock()只返回10000的增量值。
如果我更改内部循环以计算j的平方根并打印sqrt()的返回值,则clock()的返回值将上升至50000,但仍以10000为增量增加。
答案 3 :(得分:0)
在我的64位操作系统上,CLOCKS_PER_SEC速度为1000.时钟值以毫秒为单位。将从下面的代码中提取完美的时间。
int main(){
clock_t a,b;
int c,d,e,f;
c=clock();
scanf("%d",&e);
d=clock();
f=(d-c)/CLOCKS_PER_SECOND;
printf("timing is %d seconds",f);/*for 64 bit operating system
CLOCKS_PER_SECOND is 1000*/
}