Boost C++ 库
...one of the most highly regarded and expertly designed C++ library projects in the world.
— Herb Sutter and Andrei Alexandrescu, C++ Coding Standards
修复
修复
修复
修复
修复
修复
已弃用
duration_short、duration_long 已被弃用。您应该使用参数化形式 duration_fmt 或重命名的操纵符 __duration_symbol 和 __duration_prefix。duration_punct<> 已被弃用。您应该使用自由函数 get_duration_style 来获取信息,并使用 duration_units facet 进行本地化。当 BOOST_CHRONO_VERSION==2 时,前面已弃用的函数将不可用。
修复
新功能
已弃用
duration_short、duration_long 已被弃用。您应该使用参数化形式 duration_fmt 或重命名的操纵符 __duration_symbol 和 __duration_prefix。duration_punct<> 已被弃用。您应该使用自由函数 get_duration_style 来获取信息,并使用 duration_units facet 进行本地化。当 BOOST_CHRONO_VERSION==2 时,前面已弃用的函数将不可用。
修复
不予修复
尚未修复的已知错误
修复
修复
修复
新功能
修复
清理
功能
windows.h 文件)。实现
修复
Test
文档
请参阅 N2661 - A Foundation to Sleep On,该文档信息丰富,并提供了关键设计决策的动机。本节包含该文档的一些摘录。
此运算符对于计算给定时长在时间段内的位置非常方便。一个激励性的例子是将时长转换为“分解”的时间时长,例如 hours::minutes::seconds。
class ClockTime { typedef boost::chrono::hours hours; typedef boost::chrono::minutes minutes; typedef boost::chrono::seconds seconds; public: hours hours_; minutes minutes_; seconds seconds_; template <class Rep, class Period> explicit ClockTime(const boost::chrono::duration<Rep, Period>& d) : hours_ (boost::chrono::duration_cast<hours> (d)), minutes_(boost::chrono::duration_cast<minutes>(d % hours(1))), seconds_(boost::chrono::duration_cast<seconds>(d % minutes(1))) {} };
下表总结了每个平台上的每个时钟使用的 API。
表 5.4. 时钟 API 对应关系
|
时钟 |
Windows 平台 |
Posix 平台 |
Mac 平台 |
|---|---|---|---|
|
GetSystemTimeAsFileTime |
clock_gettime( CLOCK_REALTIME) |
gettimeofday |
|
|
QueryPerformanceCounter 和 QueryPerformanceFrequency |
clock_gettime( CLOCK_STEADY) |
mach_timebase_info,mach_absolute_time |
|
|
GetProcessTimes |
times |
times |
|
|
GetProcessTimes |
times |
times |
|
|
GetProcessTimes |
times |
times |
|
|
GetProcessTimes |
times |
times |
|
|
GetThreadTimes |
clock_gettime(pthread_getcpuclockid) |
clock_gettime(pthread_getcpuclockid) |
请咨询您的操作系统供应商。结果已通过调试器检查,无论是 Windows 还是 Linux,这都是操作系统有时报告的结果。
Boost.Ratio 避免了所有可能因算术运算而导致的、可以简化的溢出。typedef durations 不会检测溢出。您需要一个能够处理溢出的时长表示。
每个时钟都有其自身的特点。这取决于您需要基准测试什么。大多数时候,您可能对使用线程时钟感兴趣,但如果您需要测量受同步影响的代码,进程时钟会更好。如果您有多个进程的应用程序,可能需要系统范围的时钟。
对于跟踪目的,最好使用系统范围的时钟。
该库的代码源自 Howard Hinnant 的 time2_demo 原型。非常感谢 Howard 将他的代码在 Boost 许可证下提供。原始代码由 Beman Dawes 修改,以符合 Boost 约定。
time2_demo 包含此注释
非常感谢 Andrei Alexandrescu、Walter Brown、Peter Dimov、Jeff Garland、Terry Golubiewski、Daniel Krugler、Anthony Williams。
文件 <boost/chrono_io.hpp> 已从 Howard Hinnant 的实验性头文件 <chrono_io> 适配而来。非常感谢 Howard。
Howard Hinnant,该库的真正作者,在库开发过程中提供了宝贵的反馈和建议。特别是,chrono_io_io.hpp 源代码已从 Howard Hinnant 的实验性头文件 <chrono_io> 适配而来。
Boost.Ratio 的验收评审于 2010 年 11 月 5 日至 15 日举行。非常感谢评审经理 Anthony Williams 和所有评审员:David Deakins、John Bytheway、Roland Bock 和 Paul A. Bristow。
感谢 Ronald Bock、Andrew Chinoff、Paul A. Bristow 和 John Bytheway 帮助完善文档。
感谢 Tom Tan 报告了 MSVC V10 beta 和 MinGW-gcc-4.4.0 的一些编译器问题,并为推动统一 process_cpu_clock 时钟付出了努力。
感谢 Ronald Bock 报告了 Valgind 问题,并对文档提出了许多建议。