如何用纳秒实例化boost :: date_time :: time_duration?

时间:2018-02-08 17:45:51

标签: boost boost-date-time

我觉得我在这里遗漏了一些明显的东西。通过执行以下操作,我可以轻松地使用毫秒,微秒或秒进行time_duration:

time_duration t1 = seconds(1);
time_duration t2 = milliseconds(1000);
time_duration t3 = microseconds(1000000);

但纳秒没有功能。将纯整数纳秒值转换为time_duration的技巧是什么?

我在Debian Linux上使用amd64架构。提升版本1.55。

1 个答案:

答案 0 :(得分:1)

boost::posix_time::microseconds实际上是subsecond_duration<boost::posix_time::time_duration, 1000000>。所以...

#include <boost/date_time/posix_time/posix_time.hpp>

using nanoseconds = boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000000>;
int main() {
    boost::posix_time::time_duration t = nanoseconds(1000000000);

    std::cout << t << "\n";
}

打印

00:00:01

更新

实际上,在Boost DateTime库的Compile Options中,您可以看到选择纳秒分辨率的选项:

  

默认情况下,posix_time系统使用单个64位整数   在内部提供微秒级别的分辨率。作为一个   替代方案,64位整数和32位整数的组合   (96位分辨率)可用于提供纳秒级   决议。默认实现可以提供更好的性能   对于许多没有的应用程序,更紧凑的内存使用   需要纳秒级分辨率。

     

使用备用分辨率(96位纳秒)变量   必须在库中定义BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG   用户项目文件(即Makefile,Jamfile等)。这个宏不是   由Gregorian系统使用,因此在建造时没有效果   图书馆。

确实,您可以使用以下方式进行检查:

<强> Live On Coliru

#define BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
#include <boost/date_time/posix_time/posix_time.hpp>

int main() {
    using namespace boost::posix_time;
    std::cout << nanoseconds(1000000000) << "\n";
}