【发布时间】:2016-11-04 11:48:54
【问题描述】:
是否有一种可移植的符合标准的方法来为 1970 年 1 月 1 日 00:00:00 创建 std::chrono::time_point?这必须是线程安全的。因此,解决方案应避免使用没有线程安全保证的std::gmtime() 和std::localtime() 之类的函数。
这不是Convert std::chrono::time_point to unix timestamp 的重复,因为我要求的是线程安全 的便携式 解决方案。那里的问题也没有要求,答案也没有提供这种保证。
【问题讨论】:
-
这听起来像是两个问题,1)如何创建特定时间点 - 没有线程问题,2)如何获取当前时间 - 潜在的线程问题。
-
当心。 Posix 标准没有定义“纪元”,然后依靠“秒”和“以来”的正常含义。它定义了完整的短语“自纪元以来的秒数”,这并不意味着您可能已经认为它的意思。
-
@CaptainGiraffe 这不是重复的,因为我要求的是可移植且线程安全的解决方案。那里的问题不要求这个,答案也不提供这些保证。
-
如果我能得到这个:open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html 标准化,那么默认构造的
std::chrono::time_point{}将可移植地表示 1970-01-01 00:00:00 UTC。它将是线程安全和闪电般快速的(需要存储 64 位零)。