如何用纳秒实例化boost::date\u time::time\u持续时间?

如何用纳秒实例化boost::date\u time::time\u持续时间?,boost,boost-date-time,Boost,Boost Date Time,我觉得我错过了一些明显的东西。通过执行以下操作,我可以轻松地以毫秒、微秒或秒为单位确定时间持续时间: time_duration t1 = seconds(1); time_duration t2 = milliseconds(1000); time_duration t3 = microseconds(1000000); 但纳秒内没有任何功能。将普通整数纳秒值转换为时间持续时间的诀窍是什么 我在DebianLinux上使用amd64体系结构。Boost 1.55版。Boost::posix_

我觉得我错过了一些明显的东西。通过执行以下操作,我可以轻松地以毫秒、微秒或秒为单位确定时间持续时间:

time_duration t1 = seconds(1);
time_duration t2 = milliseconds(1000);
time_duration t3 = microseconds(1000000);
但纳秒内没有任何功能。将普通整数纳秒值转换为时间持续时间的诀窍是什么


我在DebianLinux上使用amd64体系结构。Boost 1.55版。

Boost::posix_时间::微秒实际上是
亚秒持续时间
。所以

#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";
}
更新 实际上,在Boost DateTime库的中,您可以看到有一个选择纳秒分辨率的选项:

默认情况下,posix_时间系统使用单个64位整数 内部提供微秒级分辨率。作为 或者,64位整数和32位整数的组合 (96位分辨率)可用于提供纳秒级 决议。默认实现可以提供更好的性能 对于许多不使用内存的应用程序,内存使用更加紧凑 需要纳秒分辨率

要使用备用分辨率(96位纳秒)变量 必须在库中定义
BOOST\u DATE\u TIME\u POSIX\u TIME\u STD\u CONFIG
用户项目文件(即Makefile、Jamfile等)。此宏不可用 由格里高利体系使用,因此在建筑时不起作用 图书馆

实际上,您可以使用以下方法进行检查:

#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";
}
#定义BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
#包括
int main(){
使用名称空间boost::posix_time;

std::库不这样定义有什么原因吗?@mpr我想默认库配置使用微秒分辨率,用记录的开关更新了答案,使用纳秒分辨率(注意ABI兼容性和ODR问题。在构建整个库和相关翻译单元时,始终使用文档中的标志!)
#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";
}