C++ 包含对二类时间操作的支持:
chrono
库,以各种精度跟踪时间的类型的灵活汇集(如 std::chrono::time_point )。
目录 |
chrono
库chrono
库定义三种主要类型(时长、时钟和时间点)以及工具函数和常用 typedef 。
时长由时间跨度组成,定义为某时间单位的某个计次数。例如,“ 42 秒”可表示为由 42 个 1 秒时间点位的计次所组成的时长。
定义于头文件
<chrono> |
|
定义于命名空间
std::chrono |
|
(C++11)
|
时间区间 (类模板) |
时钟由起点(或纪元)及计次频率组成。例如,时钟可以拥有 1970 年 1 月 1 日的纪元,和每一秒的计次。 C++ 定义三种时钟类型:
定义于头文件
<chrono> |
|
定义于命名空间
std::chrono |
|
(C++11)
|
来自系统范畴实时时钟的壁钟时间 (类) |
(C++11)
|
决不被调整的单调时钟 (类) |
(C++11)
|
拥有可用的最短计次周期的时钟 (类) |
时间点是从特定时钟的纪元开始经过的时间时长。
定义于头文件
<chrono> |
|
定义于命名空间
std::chrono |
|
(C++11)
|
时间中的点 (类模板) |
亦提供 C 风格日期与时间函数,例如 std::time_t 、 std::difftime 和 CLOCKS_PER_SEC 。
此示例显式关于函数调用执行时间的信息:
#include <iostream> #include <chrono> #include <ctime> long fibonacci(unsigned n) { if (n < 2) return n; return fibonacci(n-1) + fibonacci(n-2); } int main() { std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); std::cout << "f(42) = " << fibonacci(42) << '\n'; end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end-start; std::time_t end_time = std::chrono::system_clock::to_time_t(end); std::cout << "finished computation at " << std::ctime(&end_time) << "elapsed time: " << elapsed_seconds.count() << "s\n"; }
可能的输出:
f(42) = 267914296 finished computation at Mon Jul 29 08:41:09 2013 elapsed time: 0.670427s