std :: clock()和CLOCKS_PER_SEC

时间:2016-02-16 18:09:00

标签: c++

我想在我的程序中使用计时器功能。按照How to use clock() in C++上的示例,我的代码是:

int main()
{
    std::clock_t start = std::clock();

    while (true)
    {
        double time = (std::clock() - start) / (double)CLOCKS_PER_SEC;
        std::cout << time << std::endl;
    }

    return 0;
}

在运行时,它开始打印出数字。但是,该数字达到1大约需要15秒。为什么打印的数字不能达到1秒?

3 个答案:

答案 0 :(得分:2)

std::clock返回 cpu time ,而不是墙上时间。这意味着使用的cpu-seconds数,而不是经过的时间。如果你的程序只使用20%的CPU,那么cpu-seconds只会增加20秒的壁秒速度。

答案 1 :(得分:2)

实际上它是已发布内容的组合。基本上,当您的程序在紧密循环中运行时,CPU时间应该与挂钟时间一样快地增加。

但是由于你的程序正在写入stdout并且终端的缓冲区空间有限,只要该缓冲区已满,程序就会阻塞,直到终端有足够的时间打印更多生成的输出。

当然,这比从clock值生成字符串要便宜得多,因此大部分CPU时间都将用在终端和图形驱动程序中。看起来你的系统输出时间戳的CPU功率大约是产生要写入的字符串的14倍。

答案 2 :(得分:1)

std::clock

  

返回自与程序执行相关的实现定义时代开始以来进程使用的近似处理器时间。要将结果值转换为秒,请将其除以CLOCKS_PER_SEC。

因此,在程序使用cpu时间的实际秒数之前,它不会返回秒。

如果您想处理实际时间,建议您使用<chrono>提供的时钟,例如std::steady_clockstd::high_resolution_clock