我觉得我在这里缺少一些明显的东西。我可以轻松地使用毫秒,微秒或秒的时间来进行时间_
time_duration t1 = seconds(1);
time_duration t2 = milliseconds(1000);
time_duration t3 = microseconds(1000000);
,但纳米秒没有功能。将普通整数的纳秒值转换为time_duration的诀窍是什么?
我在Debian Linux上的AMD64架构上。Boost版本1.55。
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库的编译选项中,您可以看到一个选项可以选择纳秒分辨率:
默认情况下,posix_time系统使用一个64位整数 内部提供微秒级分辨率。作为 替代方案,一个64位整数和32位整数的组合 (96位分辨率(可用于提供纳米秒 决议。默认实现可能会提供更好的性能 以及许多不适用的不紧凑的内存使用量 需要纳米秒的分辨率。
使用替代分辨率(96位纳米秒(变量
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
必须在库中定义 用户项目文件(即makefile,jamfile等(。这个宏不是 Gregorian系统使用,因此在建造时没有影响 图书馆。
的确,您可以使用:
检查它活在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";
}