c++ - std::clock() 和 CLOCKS_PER_SEC

标签 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 不需要 1 秒?

最佳答案

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

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

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

关于c++ - std::clock() 和 CLOCKS_PER_SEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439992/

相关文章:

c++ - 将对象转换为引用?

C++从可变成员函数存储可变参数包

c++ - 宏可变参数和空宏可变参数

c# - 将 boost::signal 包装到 C# 委托(delegate)

c++ - 我可以使用哪个 STL 容器/算法来解决这个问题?

c++ - 在输入 C++ 中显示带前导零的日期

c++ - 在单个 MOCK_EXPECT 中调用返回和调用操作

c++ - 使用 C++ 头文件的最佳实践

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - boost::variant 是否与 std::string 一起使用?