C ++ clock()函数给出不正确的值

时间:2010-08-30 02:00:53

标签: c++ clock

我试图编写一个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()计数没有贡献? (哪个有意义;为什么它会在睡觉时执行时钟周期?)

4 个答案:

答案 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*/




}