我正在尝试使用 condition_variable_any::timed_wait()
当我将 a 传递给boost::chrono::millisecond函数时,它无法编译:
error: no match for ‘operator+’ in ‘boost::get_system_time() + wait_duration’
Run Code Online (Sandbox Code Playgroud)
但是,如果我传入boost::posix_time::milliseconds该函数,它确实会编译。
问题是我不明白两者之间的区别。他们都声称是持续时间。但据我所知,posix time 代表自纪元以来的时间,对我而言,这意味着boost::posix_time::milliseconds p(1000)代表纪元后 1 秒的时间。我不认为这是一个持续时间。
我错过了什么?有人可以解释这些差异吗?
尽管我不是开发人员或标准委员会的成员,但我会尝试一下。
Boost 是一个想法的游乐场,有朝一日可能会被集成到标准库中。因此,它通常具有您在其他地方看不到的怪癖。
boost::posix_time 是 posix_time 数据结构的包装器。POSIX(便携式操作系统接口)是 IEEE 给出的一组标准,试图让所有操作系统和程序都使用类似的语言(剧透,他们没有)。POSIX 为时间和时差定义了一个定点数字系统,尽管该结构的分辨率各不相同。在 BOOST 中,分辨率可在编译时配置。该库的目标是更轻松地操作符合 POSIX 的时间结构。在 1.31 之前引入。
boost::chrono(作为 std::chrono 集成到 C++11 中)是一个通用的时间尺度库。目标是拥有一组可以很好地处理时间并允许用户配置底层数据类型的函数和结构。没有努力符合任何标准。在 1.51 中引入。
虽然这是(100%)两个库做同样的事情,但它们的方式略有不同。在像 boost 这样的系统中,这可以说是不可避免的:对于新的语言功能和编程要求,您可能希望完全折射某些东西,但需要保持(某种程度上)向后兼容性。但这导致了一个奇怪的问题:不同的实现,只是为了混淆你。因为 POSIX 时间太旧了,大多数接口(如 condition_variable_any::timed_wai)只有一个 posix_time 接口。
| 归档时间: |
|
| 查看次数: |
3087 次 |
| 最近记录: |