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

bfo*_*ops 3 c++ clock

我试图编写一个Timer类(不知道boost有一个),然后当它不起作用时,我试着输出clock()的值,使用这个代码:

#include <ctime>
#include <iostream>

int main()
{
 for(int i = 0; i < 50; ++i)
 {
  std::cout << std::clock() << " ";
 }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,我得到一系列的0.我有类似的经验,当使用提升线程休眠功能将时间延长一点时间(虽然几秒后,它从0跳到10,000并保持输出10,000).

我正在运行Gentoo Linux.这是平台吗?一个C++的东西?这是怎么回事?

编辑:奇怪的是,在几秒钟之后跳转到10000 ,而不是几毫秒.当我一次睡觉我的线程一秒钟时,花了五六秒才达到10000.但是,如果我理解正确的话.线程花费的时间对clock()计数没有贡献?(这有意义;如果它正在睡觉,它为什么会执行时钟周期?)

sla*_*ker 6

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

  • 注意 - 它不会**为微秒.(因此CLOCKS_PER_SEC宏的原因) (3认同)
  • http://www.cplusplus.com/reference/clibrary/ctime/clock/.这表示不保证是任何特定单位.您必须使用CLOCKS_PER_SEC宏以实际单位查找时间.至于10ms的分辨率,我认为这并不是非常罕见. (2认同)