- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在打印我的日志时,我希望每条消息都有一个时间戳,用于测量自程序启动以来的时间。最好以纳秒为单位,但毫秒也可以:
( 110 ns) Some log line
( 1220 ns) Another log line
( 2431 ns) Now for some computation...
(10357 ns) Error!
据我了解,C++ chrono 库中有三个不同的时钟和另外两个 C 风格的时钟:
最佳答案
system_clock
是一个与 UTC 保持时间的时钟(不包括闰秒)。每隔一段时间(可能一天几次),它会进行少量调整,以使其与正确的时间保持一致。这通常是通过网络服务(如 NTP)完成的。这些调整通常以微秒为单位,但可以在时间上向前或向后。这个时钟的时间戳实际上有可能(虽然不太可能也不常见)倒退一小部分。除非被管理员滥用,system_clock
由于夏令时或更改计算机的本地时区,因此不会按总量跳跃,因为它始终跟踪 UTC。
steady_clock
就像一个秒表。它与任何时间标准都没有关系。它只是不断滴答作响。它可能不会保持完美的时间(真的没有时钟)。但它永远不会被调整,尤其是不会向后调整。它非常适合对短代码进行计时。但由于它从未得到调整,它可能会随着时间的推移而漂移 system_clock
调整为与 UTC 保持同步。
这归结为事实steady_clock
最适合短时间的计时。它还通常具有纳秒分辨率,尽管这不是必需的。和 system_clock
最适合计时“长”时间,其中“长”非常模糊。但当然小时或天有资格被称为“长”,而一秒以下的持续时间则不然。如果您需要将时间戳与人类可读的时间(例如民用日历上的日期/时间)相关联,system_clock
是唯一的选择。
high_resolution_clock
允许是 steady_clock
的类型别名或 system_clock
,而且在实践中总是如此。但有些平台别名为 steady_clock
还有一些到 system_clock
.所以恕我直言,最好直接选择steady_clock
或 system_clock
这样你就知道你得到了什么。
虽然没有指定, std::time
通常仅限于一秒的分辨率。因此,对于需要亚秒级精度的情况,它完全无法使用。否则 std::time
跟踪UTC(不包括闰秒),就像system_clock
.
std::clock
跟踪处理器时间,而不是物理时间。也就是说,当您的线程不忙于做某事并且操作系统已将其停放时,测量值 std::clock
不会反射(reflect)在停机期间增加的时间。如果这是您需要测量的内容,这可能非常有用。如果您使用它而没有意识到您正在测量处理器时间,这可能会非常令人惊讶。
和 C++20 的新功能
C++20 为 <chrono>
增加了四个时钟图书馆:
utc_clock
就像 system_clock
,除了它计算闰秒。这主要在您需要减去两个 time_point
时有用。 s 跨越闰秒插入点,您绝对需要计算插入的闰秒(或其一部分)。
tai_clock
测量自 1958-01-01 00:00:00 以来的秒数,并在该日期比 UTC 提前 10 秒。它没有闰秒,但每次在 UTC 中插入闰秒时,TAI 和 UTC 的日历表示法就会相差一秒。
gps_clock
模拟 GPS 时间系统。它测量自 1980 年 1 月第一个星期日 00:00:00 UTC 以来的秒数。与 TAI 一样,每次在 UTC 中插入闰秒时,GPS 和 UTC 的日历表示法又会偏离一秒。由于 GPS 和 TAI 处理 UTC 闰秒的方式相似,因此 GPS 的日历表示始终比 TAI 的日历表示晚 19 秒。
file_clock
是 filesystem
使用的时钟库,并且是产生 chrono::time_point
的原因别名 std::filesystem::file_time_type
.
可以使用 C++20 中名为 clock_cast
的新命名强制转换。在 time_point
之间转换system_clock
的s , utc_clock
, tai_clock
, gps_clock
和 file_clock
.例如:
auto tp = clock_cast<system_clock>(last_write_time("some_path/some_file.xxx"));
tp
的类型是
system_clock
基于
time_point
同
duration
类型(精度)为
file_time_type
.
关于c++ - 用于记录时间戳的不同 C++ 时钟的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64080301/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!