@zhengyuhong
2015-06-10T03:27:19.000000Z
字数 3311
阅读 1394
C++11 STL Boost
template <class Rep, class Period = ratio<1> >class duration;
chrono是一个time library, 源于boost。其所有实现均在std::chrono namespace下
Rep表示一种数值类型,用来表示Period的数量,比如int float double
Period是ratio类型,用来表示[用秒表示的时间单位]比如seconds miliseconds
常用的duration<Rep,Period>已经定义好了,在std::chrono::duration下:
| ratio | Period |
|---|---|
| ratio<3600, 1> | hours |
| ratio<60, 1> | minutes |
| ratio<1, 1> | seconds |
| ratio<1, 1000> | microseconds |
| ratio<1, 1000000> | microseconds |
| ratio<1, 1000000000> | nanosecons |
typedef duration < , ratio<3600,1> > hours;typedef duration < , ratio<60,1> > minutes;typedef duration < , > seconds;typedef duration < , milli > milliseconds;//milli (i.e., ratio<1,1000>)typedef duration < , micro > microseconds;//micro (i.e., ratio<1,1000000>)typedef duration < , nano > nanoseconds; //nano (i.e., ratio<1,1000000000>)
template <class Clock, class Duration = typename Clock::duration>class time_point;
time_point,是C++11引入的表示特定时间点的工具。
std::chrono::time_point<Clock,Duration>常用的具体类型:std::chrono::time_point<std::chrono::system_clock,dtn>其中dtn通常可取以下,当然也可以是自定义Duration类型std::chrono::hoursstd::chrono::minutesstd::chrono::secondsstd::chrono::millisecondsstd::chrono::microsecondsstd::chrono::nanoseconds最常用的的就是dtn = std::chrono::seconds;std::chrono::time_point<std::chrono::system_clock,std::chrono::seconds>
example例子
// this_thread::sleep_for example#include <iostream> // std::cout#include <iomanip> // std::put_time#include <thread> // std::this_thread::sleep_until#include <chrono> // std::chrono::system_clock#include <ctime> // std::time_t, std::tm, std::localtime,using std::chrono::time_point;using std::chrono::system_clock;using std::system_clock::from_time_t;using std::tm;using std::time_t;using std::mktime;int main(){std::tm tm_tp;tm_tp.tm_year = 2015 - 1900;tm_tp.tm_mon = 7; //0是一月,1是二月,···,7是8月tm_tp.tm_mday = 15;tm_tp.tm_hour = 19;tm_tp.tm_min = 19;tm_tp.tm_sec = 19;time_t t_tp = mktime(&tm_tp); //得到时间的整数值time_point<system_clock> chrono_tp = from_time_t(t_tp);}
std::tm结构 参考struct tm
std::chrono::system_clock表示当前的系统时钟,系统中运行的所有进程使用now()得到的时间是一致的。每一个clock类中都有确定的time_point, duration, Rep, Period类型。
static time_point now() noexcept; //获取当前时间time_point
static time_t to_time_t (const time_point& tp) noexcept;//time_point转换成time_t秒
example
#include <iostream>#include <ctime>#include <ratio>#include <chrono>int main (){using namespace std::chrono;duration<int,std::ratio<60*60*24> > one_day (1);system_clock::time_point today = system_clock::now();system_clock::time_point tomorrow = today + one_day;time_t tt;tt = system_clock::to_time_t ( today );std::cout << "today is: " << ctime(&tt);tt = system_clock::to_time_t ( tomorrow );std::cout << "tomorrow will be: " << ctime(&tt);return 0;}
static time_point from_time_t (time_t t) noexcept;
example
#include <iostream>#include <ctime>#include <ratio>#include <chrono>int main (){using namespace std::chrono;// create tm with 1/1/2000:std::tm timeinfo = std::tm();timeinfo.tm_year = 100; // year: 2000timeinfo.tm_mon = 0; // month: januarytimeinfo.tm_mday = 1; // day: 1ststd::time_t tt = std::mktime (&timeinfo);system_clock::time_point tp = system_clock::from_time_t (tt);system_clock::duration d = system_clock::now() - tp;// convert to number of days:typedef duration<int,std::ratio<60*60*24>> days_type;days_type ndays = duration_cast<days_type> (d);// display result:std::cout << ndays.count() << " days have passed since 1/1/2000";std::cout << std::endl;return 0;}
chrono最重要就是这几个类,本着够用的原则,其他等需要时再学习
