我试图编写一个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 回答
clock()
返回值以微秒为单位指定 . 但是,clock()
实现使用的任何低级系统调用的典型粒度都要低得多 . 因此,在您的系统上,似乎粒度为10毫秒 . 另请注意clock()
测量实时 - 它测量程序使用的CPU时间 . 因此,当程序控制CPU时,时间会流动,并且当程序暂停时会冻结 - 例如,休眠 .std::clock
's resolution is unspecified. In most cases, it'的分辨率约为10ms
. 因此跳跃 .请尝试以下方法:
在我的系统上,我看到clock()的返回值保持在0,直到某个时刻它跳到10000.它一直保持在10000直到结束 . 如果我删除内部循环中的std :: cout,则clock()的返回值始终保持为0 . 看起来像clock()只返回10000的增量值 .
如果我更改内部循环以计算j的平方根并打印sqrt()的返回值,则clock()的返回值将上升至50000,但仍以10000为增量增加 .
在我的64位操作系统上,CLOCKS_PER_SEC速度为1000.时钟值以毫秒为单位 . 将从下面的代码中提取完美的时间 .