c++ - 如何在运行时设置纪元创建可实例化的自定义时钟
问题描述
我的问题类似于这个问题(如何创建用于 std::chrono 函数的自定义时钟?),但有两个细微差别:
- 时代直到运行时才知道
- 可能有多个时钟实例,每个实例都有自己的纪元
我正在考虑的用例是视频流时间。即视频流中的每一帧都有一个相对于第一帧时间戳的时间戳(pts,表示时间戳)。可能有多个视频流,每个视频流都有自己的流开始时间。
我认为直到运行时才知道时代很容易,只需添加一个set_epoch
函数。但是我不确定在now()
函数是静态的情况下如何实例化(我认为它需要set_epoch
是静态的。)
到目前为止,我只是通过将时间戳设置为 aduration
而不是a 来处理这个问题,time_point
但这似乎是对类型的一种滥用。这也是最好的解决方案还是有更好的方法?我想也许一个更广泛的问题是,使用 atime_point
或duration
type 作为时间戳更好吗?Atime_point
似乎很自然,但这意味着您必须全天候定义。Aduration
似乎不符合预期的定义,但将其与clock
定义分离。
解决方案
最终,我认为您是在说:我需要一个有状态的 chrono::clock。正确的?
纪元必须是时钟的运行时数据成员。这并不真正符合Cpp17Clock 要求。
原来C++20类型std::chrono::local_t
也是不符合Cpp17Clock要求的时钟:
// [time.clock.local], local time
struct local_t {};
方便链接:http ://eel.is/c++draft/time.clock.local
表示的时间点族
local_time<Duration>
基于伪时钟local_t
。local_t
没有成员now()
,因此不符合时钟要求。
P2212是为解决不符合Cpp17Clock 要求的时钟而编写的。事实证明,可以time_point
毫无问题地基于这样的时钟创建 s。 对此类时钟唯一不能做的就是调用需要Cpp17Clock 要求的算法。例如std::this_thread::sleep_until
.
但是如果你不想sleep_until
用 a 跟MyCuriousClock::time_point
注,那么没有伤害,没有犯规。如果标准可以创建std::chrono::local_t
不符合Cpp17Clock 要求的时钟 () ,那么您也可以——只要您了解它的局限性。
推荐阅读
- spring-boot - Spring Boot - Hikari 数据库配置
- java - AWS 上的 Apache 目录工作室
- php - PHP如何使用数据库数据制作下拉菜单
- php - 有没有办法可以通过 CSS 类标题编辑 CSS 变量?
- java - Google Camera API 应用程序在重新进入时崩溃
- xaml - XAML 按钮单击事件中的签名不正确
- java - 尝试了所有解决方案,但仍然无法修复错误:ORA-12519,TNS:找不到合适的服务处理程序
- regex - 正则表达式抓取 int/floats 并排除文本
- r - 基于列合并多个文件并打印第n列R
- javascript - 替换javascript中的正则表达式子字符串