我觉得我在这里遗漏了一些明显的东西。通过执行以下操作,我可以轻松地使用毫秒,微秒或秒进行time_duration:
time_duration t1 = seconds(1);
time_duration t2 = milliseconds(1000);
time_duration t3 = microseconds(1000000);
但纳秒没有功能。将纯整数纳秒值转换为time_duration的技巧是什么?
我在Debian Linux上使用amd64架构。提升版本1.55。
答案 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";
}