【发布时间】:2013-04-17 03:16:52
【问题描述】:
我想要的只是获取自纪元以来的时间(以毫秒为单位)并将其存储在无符号长整数中。
我找到了this related question。但老实说,这不可能是执行如此简单任务的最简单方法,不是吗?我希望有更简单的东西,但在std::chrono reference 中找不到任何东西。任何建议都是最受欢迎的。
我不一定非得使用std::chrono,但我希望它独立于平台。
【问题讨论】:
-
auto ms_since_epoch = duration_cast<milliseconds>(since_epoch);看起来已经很简单了。也许问题出在chrono的基本心态上,希望你能坚持类型安全和比unsigned long更丰富的类型系统。 -
since_epoch只是system_clock::now().time_since_epoch()或您要转换的任何持续时间的替代变量。使用auto并不意味着代码不是类型安全的。在这种情况下,我们显式声明了类型,我们只使用auto,所以我们不必重复它。 -
但是计时持续时间的基本思路是类型为您跟踪单位,就像完整的物理单位库一样,您不必担心它,除非在边界进出chrono 的类型系统。例如考虑
std::this_thread::sleep_for(microseconds(1000));与std::this_thread::sleep_for(milliseconds(1));。库不关心输入的单位。两个持续时间代表相同的时间量,这就是最重要的。 -
@bames53,是的,原则上您对类型安全问题的权利。但是我真的不喜欢使用自动,特别是如果我不知道它会是什么类型。我并没有说 chrono 库没用,我完全同意它提供了很多不错的功能。困扰我的是,在我看来,微不足道的任务(比如这个)非常复杂。
-
@Haatschii 也许部分原因是这种事情应该是一种罕见的操作,只在边界上进行。理想情况下,无需将数据移出类型系统即可完成所有工作。这样不仅不需要使用
count()来获得无单位值,甚至不需要使用duration_cast;只需在计算中直接使用since_epoch。