【问题标题】:std::clock() and CLOCKS_PER_SECstd::clock() 和 CLOCKS_PER_SEC
【发布时间】:2016-02-16 18:09:00
【问题描述】:

我想在我的程序中使用定时器功能。按照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 不需要 1 秒?

【问题讨论】:

标签: c++


【解决方案1】:

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

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

这在 CPU 方面当然比从 clock 值生成字符串要昂贵得多,因此大部分 CPU 时间将花在终端和图形驱动程序上。与生成要写入的字符串相比,您的系统输出时间戳所需的 CPU 功率似乎是其 14 倍。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      std::clock

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

      所以在程序使用实际一秒的 cpu 时间之前它不会返回一秒。

      如果您想处理实际时间,我建议您使用&lt;chrono&gt; 提供的时钟,例如std::steady_clockstd::high_resolution_clock

      【讨论】:

        猜你喜欢
        • 2011-09-01
        • 2013-05-17
        • 1970-01-01
        • 2018-09-17
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多