chrono

chrono
#include <chrono>

<chrono> 라이브러리는 타입 세이프(type safe)한 시계 및 타이머 기능을 제공한다.
- 클럭을 기준으로 특정 시점을 나타내는 time_point
- 명백한 의미를 지닌 duration
time_point<system_clock> now=system_clock::now(), then=now+hours(2);
time_t then_time=system_clock::to_time_t(then);
cout<<"Darling, I'll be with you at "<<ctime(&then_time);
C++에서 시가늘 문자열로 출력하는 경우 C 라이브러리의 <ctime>을 재활용한다.
ctime()은 현지 시각을 문자열(char[])로 변환한다.(개행 문자 마지막에 포함)
연산 소요시간
inline double my_root(double x, double eps=1e-12){
double sq=1.0, sqo;
do{
sqo=sq;
sq=0.5*(sqo+x/sqo);
}while(abs(sq-sqo)>eps);
return sq;
}
int main(void){
int rep=3;
time_point<steady_clock> start=steady_clock::now();
for(int i=0; i<rep; ++i) r3=my_root(3.0);
auto end=steady_clock::now();
cout<<"my_root(3.0)="<<r3<<", the calculation took "<<((end-start)/rep).count()<<" ticks\n";
}
시간 단위 지정해서 변경
duration_cast<microseconds>((end-start)/rep).count()/1000.;
count() 메서드는 정수값을 반환한다.
clock의 해상도
clock 내부의 typedef peroid에 있는 비율(ratio)를 이용해서 알 수 있다.
using P=steady_clock::period; //
cout<<"Resoultion is "<<double{P::num}/P::den<<"s.\n";
- system_clock
시스템의 네이티브 벽시계로 <ctime>과 호환가능하다.
- high_resolution_clock
기본 시스템에서 가능한 최대 해상도를 가진다.
- steady_clock
증가하는 시점을 보장하는 시계로 타이머에 가장 적절하게 사용