std::clock() and CLOCKS_PER_SEC
std::clock() and CLOCKS_PER_SEC
我想在我的程序中使用计时器函数。按照如何在 C++ 中使用 clock(( 中的示例,我的代码是:
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;
}
在运行它时,它开始打印出数字。但是,该数字大约需要 15 秒才能达到 1。为什么打印的数字不需要 1 秒就可以达到 1?
实际上,
它是已发布内容的组合。基本上,当您的程序在紧密循环中运行时,CPU 时间应该与挂钟时间一样快。
但是,由于程序正在写入 stdout,并且终端的缓冲区空间有限,因此只要缓冲区已满,程序就会阻塞,直到终端有足够的时间打印更多生成的输出。
当然,这比从clock
值生成字符串要昂贵得多,因此大部分CPU时间将花费在终端和图形驱动程序上。似乎您的系统输出时间戳所需的 CPU 功率大约是生成要写入的字符串的 14 倍。
std::clock
返回 CPU 时间,而不是挂机时间。这意味着使用的 CPU 秒数,而不是经过的时间。如果您的程序仅使用 20% 的 CPU,则 CPU 秒只会以墙秒速度的 20% 增加。
std::clock
返回自与程序执行相关的实现定义的时代开始以来进程使用的近似处理器时间。要将结果值转换为秒,请将其除以 CLOCKS_PER_SEC。
因此,在程序使用实际的一秒 CPU 时间之前,它不会返回一秒。
如果你想处理实际时间,我建议你使用std::steady_clock
或std::high_resolution_clock
等<chrono>
提供的时钟
相关文章:
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 继承构造函数(ISO 2011 SEC 12.9第7段)
- 如何做 boost::asio::spawn 与 io_service-per CPU.
- 为整个Markdown文档设置默认的PER代码语言
- D3D11中没有三个组件8bits-per-per-per-per-per-per-per-per-dxgi纹理格式
- "State pattern" vs "one member function per state" ?
- 具有 SVM、EM 和其他具有"weights per sample"的方法的库,例如
- BOOST LOCAL_DATE_TIME:如何设置特定时间信息(小时,最小值和SEC)
- Visual Studio 2013 中"per file"自定义生成步骤在哪里?
- Websocket握手Sec-Webocket Accept标头值不正确
- Is struct A { int a[2] = {1, 2}; }; legal as per C++11?
- 如何解释浏览器的服务器握手的 Sec-websocket-key ?
- 将 int** 转换为"pointer to a two-dimensional array of integers with fixed number of elements per column"