- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下程序:
#include <chrono>
#include <iostream>
#include <vector>
inline uint64_t now() {
return std::chrono::duration_cast
<std::chrono::nanoseconds>
(std::chrono::system_clock::now()
.time_since_epoch())
.count();
}
int main() {
std::vector<uint64_t> v;
for (int i = 0; i < 1000; i++)
v.push_back(now());
for (int i = 0; i < v.size()-1; i++)
std::cout << v[i+1] - v[i] << std::endl;
}
打印 250 到 300 范围内的数字:
g++ (Ubuntu 8.2.0-7ubuntu1) 8.2.0
与:
Linux 4.18.0-15-generic #16-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
意思是 std::chrono::system_clock 在这个系统上是纳秒精度(很可能是 gettimeofday 对吗?)。我有几个问题:
在这个系统上 std::chrono::system_clock
和 std::chrono::steady_clock
有什么区别? (是的,我知道它们在标准中有不同的规定,我正在考虑这个实现。)
所有 libstdc++ 目标的答案是否相同?
所有 libc++ 目标的答案是否相同?
Windows/MSVC 目标上的答案是否相同?
最佳答案
我不确定您是在问您想要得到回答的问题。我看到的一件事是您询问稳定时钟和系统时钟之间在精度方面的差异。第二个,仅从代码片段来看,是关于 system_clock::now、duration_cast、vector::push_back/vector::insert 和(隐式)vector::resize 的性能。
如果您不介意的话,我会尝试回答这两个问题中的第一个:
因此,询问任何特定的实现并希望它们的常量也将在其他实现中使用——即使对于同一供应商——是不可取的。我总是尝试使用时钟的::time_point 或其::duration,或者,作为最后的手段,毫秒或纳秒,这取决于我测量的是什么以及测量的东西可以飞多快。
另请注意,有 system_clock::(to/from)_time_t() 函数,即使 system_clock::duration 具有更精细的周期,它肯定会产生 1 比 1 的值(秒)。
修改后的片段,使用 steady_clock,它的 time_point 和尽可能晚的调用 duration_cast 将是:
#include <chrono>
#include <iostream>
#include <vector>
int main() {
using namespace std::chrono;
using clock = steady_clock;
std::vector<clock::time_point> v;
for (int i = 0; i < 1000; i++)
v.push_back(clock::now());
for (size_t i = 0; i < v.size()-1; i++) {
std::cout
<< duration_cast<nanoseconds>(
v[i+1] - v[i]
).count()
<< "ns\n";
}
}
编辑:哦,还有一件事是原始代码中没有任何内容可以证明您的库使用 nano 作为 system_clock 中的句点。你正在做一个 duration_cast
编辑 2: 谢天谢地,这很复杂。更改了第一个要点中 system_clock 不稳定的原因。
关于c++ - C++ 实现中 std::chrono::system_clock 与 std::chrono::steady_clock 的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54741852/
我有一个变量存储为 long 来自 std::chrono::system_clock::time_point.time_since_epoch().count() 的值。我现在想从 long 变量中
我正在编写代码来为 for 循环计时,我使用了教授给我的代码,它使用了 system_clock。我的问题是,在我计时的一个 for 循环中,它返回负时间。有时它是不同的数字,但总是负数。 代码如下:
这是我找到的一些代码: std::cout #include int main() { std::cout << std::chrono::system_clock::period::nu
如何从 std::chrono::system_clock::time_point 设置平台(windows、linux、android)的系统时间。 最佳答案 您不能使用 std::chrono 工
我阅读了有关 boost::chrono 的全部信息,但仍然没有明白如何以简单的方式将 boost::chrono::system_clock 转换为字符串。例如,我想获取当前时间并将其转换为下一种格
如何将chrono::system_clock::time_point值加数月? 谢谢! 最佳答案 概述 这是一个非常有趣的问题,有几个答案。 “正确”的答案是您必须针对特定应用程序决定的。 使用月份
将来调用 system_clock::now() 可以给出过去的时间吗?例如,因为夏令时? 调用 system_clock::now().time_since_epoch() 怎么样?还是保证总是返回
我已经对类似这样的问题进行了一些很好的回答 one . 然而,在将字符串转换为 time_point 并返回字符串后,我的代码似乎在一小时后给出了输出。 给出错误答案的代码: #include #i
我试图创建一个程序来告诉我明天是星期几(从 1 月 1 日开始),但我写下的代码似乎不起作用。 这是我的代码: #include #include #include #include int
我知道 std::chrono::system_clock::time_point 的默认值是时钟的纪元,但我在 C++11 标准中找不到任何规定system_clock 的纪元与 POSIX 纪元
我有一个小问题:我如何编写以下代码没有 auto。 auto a = std::chrono::system_clock::now() /* do something */ auto b = std:
我正在尝试通过保留微秒精度将以下列格式表示的字符串时间戳:“28.08.2017 03:59:55.0007”转换为 std::chrono::system_clock::time_point。有没有
我想写一个可移植性很强的代码,我需要在初始化时调用std::chrono::system_clock::now()。这个函数会抛出异常吗? 在c++11标准中,没有提到这个问题。 (至少,我没有找到)
我目前的模式(对于 unix)是调用 gettimeofday,将 tv_sec 字段转换为 time_t,通过 传递localtime,并将结果与 tv_usec 组合。这给了我一个完整的日期(
我正在编写运行在 BusyBox 嵌入式 Linux 上的 C++ 代码。我的代码及其库多次调用 std::chrono::system_clock::now() 以获取当前时间。 从现在开始,我的盒
std::chrono::system_clock::time_since_epoch().count() 以微秒为单位给出结果。 我想要以纳秒为单位的当前时间。但我不能使用 high_resolut
在为 FORTRAN 程序计时时,我通常只使用命令 call cpu_time(t) . 然后我偶然发现了call system_clock([count,count_rate,count_max])
我一直在为我们的代码库中的一个类编写单元测试,该类基本上将日期、时间值从 std::string 转换为 std::chrono::time_point 并且反之亦然,对于不同类型的时间戳(yyyy-
大家好,我创建了一个 C++ 应用程序,它使用 std::chrono 来计算时差。 在某些时候,我将文件上传到服务器,作为响应,我从 receive.php 获得了一个纪元时间戳,它通知了文件完全上
我在下面编写的函数是尝试允许 32 位和 64 位时间并努力变得更加灵活。我一直收到关于数据转换丢失的警告,这不太合理。 time_t now() { using namesp
我是一名优秀的程序员,十分优秀!