首页 文章

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

提问于
浏览
3

我试图编写一个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之后会出现一些 seconds ,而不是几毫秒 . 当我一次睡觉我的线程一秒钟时,花了五六秒才达到10000.但是,如果我对时钟()计数做出贡献? (这有意义;如果它正在睡觉,它为什么会执行时钟周期?)

4 回答

  • 5

    clock() 返回值以微秒为单位指定 . 但是, clock() 实现使用的任何低级系统调用的典型粒度都要低得多 . 因此,在您的系统上,似乎粒度为10毫秒 . 另请注意 clock() 测量实时 - 它测量程序使用的CPU时间 . 因此,当程序控制CPU时,时间会流动,并且当程序暂停时会冻结 - 例如,休眠 .

  • 0

    std::clock 's resolution is unspecified. In most cases, it'的分辨率约为 10ms . 因此跳跃 .

  • 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为增量增加 .

  • 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*/
    
    
    
    
    }
    

相关问题