本文最后更新于:2022年9月29日 下午
                  
                
              
            
            
              
                
                cpp使用chrono获取当前时间
有时候我们需要测试一个函数的运行时间,可以使用 std中的chrono来完成此功能,示例代码如下。
示例
示例1
测试代码如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 | #include <chrono>#include <iostream>
 
 int main() {
 
 
 std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
 
 
 std::chrono::nanoseconds d = now.time_since_epoch();
 std::cout <<"current nanoseconds: " << d.count() << std::endl;
 
 
 std::chrono::microseconds mcrosec = std::chrono::duration_cast<std::chrono::microseconds>(d);
 std::cout<<"current microseconds: " << mcrosec.count() <<std::endl;
 
 
 std::chrono::milliseconds millsec = std::chrono::duration_cast<std::chrono::milliseconds>(d);
 std::cout<<"current milliseconds: " << millsec.count() << std::endl;
 
 
 std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(d);
 std::cout<<"current seconds: " << sec.count() << std::endl;
 
 
 std::chrono::minutes minutes = std::chrono::duration_cast<std::chrono::minutes>(d);
 std::cout<<"current minutes: " << minutes.count() << std::endl;
 
 return 0;
 }
 
 | 

示例2
测试代码如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | #include <iostream>#include <chrono>
 
 int main() {
 
 auto t1 = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
 for(int i=0;i<1000000;i++);
 auto t2 = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
 std::cout << t2 - t1 << std::endl;
 
 
 int64_t t11 = std::chrono::duration_cast<std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
 for(int i=0;i<1000000;i++);
 int64_t t12 = std::chrono::duration_cast<std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
 std::cout << t12 - t11 << std::endl;
 
 
 int64_t t21 = std::chrono::system_clock::now().time_since_epoch().count();
 for(int i=0;i<1000000;i++);
 int64_t t22 = std::chrono::system_clock::now().time_since_epoch().count();
 std::cout << t22 - t21 << std::endl;
 return 0;
 }
 
 | 

需注意:不同的时间精度用来存储的类型可以不同,但需要满足其条件,否则会溢出。
| 单位 | 长度 | 
| nanoseconds/纳秒 | 至少 64bits 的有符号数 | 
| microseconds/微妙 | 至少 55bits 的有符号数 | 
| milliseconds/毫秒 | 至少 45bits 的有符号数 | 
| seconds/秒 | 至少 35bits 的有符号数 | 
| minutes/分 | 至少 29bits 的有符号数 | 
| hours/时 | 至少 23bits 的有符号数 | 
参考
- cpp reference chrono