-
序
C++11版本中将chrono库加入标准库。所有的定义在命名空间std::chrono之中。库分为三大模块
时间点 时钟 持续时间 time_point steady_clock等 duration 核心在于时间点类
time_point类模板:
- 模板第一参数为非默认参数,时间类。以什么角度计算时间,下列两个表格为不同角度。
时间类 定义 场景 steady_clock 程序运行的时间 测试时间 system_clock 程序运行的时间+系统调度的时间 显示时间 - 模板第二参数为默认参数,时间间隔,为duration<long int, ratio<1, 1000000000>>。以long int存储时间,并通过ratio中的比率进行兑换,即num*(1/100...0),单位为秒。
- 模板第一参数为非默认参数,时间类。以什么角度计算时间,下列两个表格为不同角度。
-
steady_clock
#include <chrono> #inclued <iostream> using namespace std; using namespace std::chrono; int main() { // time_point构造函数 // 第一参数为非默认参数,时间类 // 第二参数为默认参数,时间间隔,为duration<long int, ratio<1, 1000000000>> time_point<steady_clock> start, end; // 静态函数:now start = steady_clock::now(); /* 测试代码 */ end = steady_clock::now(); // duration构造函数 // 第一参数为非默认参数,存储类型 // 第二参数为默认参数,时间换算比率,为ratio<1> // 以下二者选其一即可,单位不同 // 方式一,单位为纳秒 duration<long int, std::ratio<1, 1000000000>> duration = end - start; // 方式二,单位为秒 duration<double> duration = end - start; cout << duration.count() << endl; return 0; }
-
system_clock
#include <chrono> #inclued <iostream> using namespace std; using namespace std::chrono; int main() { // 获取当前表示时间,以下二者选其一即可 // 方式一 // 类型为duration<long int, ratio<1, 1000000000>> auto dur_curr = system_clock::now().time_since_epoch(); time_t tt = durr_curr / 1000000000; // 方式二: duration<double> dur_curr = system_clock::now().time_since_epoch().count(); time_t tt = dur_curr; // ctime将秒转换为真实世界的时间 cout << ctime(&tt) << endl; return 0; }
-
其他
// duration常用时间 #include <chrono> #inclued <iostream> using namespace std; using namespace std::chrono; int main(void) { // duration<long int, ratio<3600, 1>> auto dur1 = hours(2); // duration<long int, ratio<60, 1>> auto dur2 = minutes(30); // duration<long int, ratio<1, 1> auto dur3 = seconds(3); // 以秒形式输出时间 std::cout << duration_cast<seconds>(dur1).count() << std::endl; std::cout << duration_cast<seconds>(dur2).count() << std::endl; return 0; }