[关闭]
@zhengyuhong 2015-06-10T03:27:19.000000Z 字数 3311 阅读 1394

chrono

C++11 STL Boost


chrono::duration

  1. template <class Rep, class Period = ratio<1> >
  2. class duration;

chrono是一个time library, 源于boost。其所有实现均在std::chrono namespace
  Rep表示一种数值类型,用来表示Period的数量,比如int float double
Periodratio类型,用来表示[用秒表示的时间单位]比如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
  1. typedef duration < , ratio<3600,1> > hours;
  2. typedef duration < , ratio<60,1> > minutes;
  3. typedef duration < , > seconds;
  4. typedef duration < , milli > milliseconds;//milli (i.e., ratio<1,1000>)
  5. typedef duration < , micro > microseconds;//micro (i.e., ratio<1,1000000>)
  6. typedef duration < , nano > nanoseconds; //nano (i.e., ratio<1,1000000000>)

example

chrono::time_point

  1. template <class Clock, class Duration = typename Clock::duration>
  2. class time_point;

  time_point,是C++11引入的表示特定时间点的工具。

  1. std::chrono::time_point<Clock,Duration>常用的具体类型:
  2. std::chrono::time_point<std::chrono::system_clock,dtn>
  3. 其中dtn通常可取以下,当然也可以是自定义Duration类型
  4. std::chrono::hours
  5. std::chrono::minutes
  6. std::chrono::seconds
  7. std::chrono::milliseconds
  8. std::chrono::microseconds
  9. std::chrono::nanoseconds
  10. 最常用的的就是
  11. dtn = std::chrono::seconds;
  12. std::chrono::time_point<std::chrono::system_clock,std::chrono::seconds>

example例子

  1. // this_thread::sleep_for example
  2. #include <iostream> // std::cout
  3. #include <iomanip> // std::put_time
  4. #include <thread> // std::this_thread::sleep_until
  5. #include <chrono> // std::chrono::system_clock
  6. #include <ctime> // std::time_t, std::tm, std::localtime,
  7. using std::chrono::time_point;
  8. using std::chrono::system_clock;
  9. using std::system_clock::from_time_t;
  10. using std::tm;
  11. using std::time_t;
  12. using std::mktime;
  13. int main()
  14. {
  15. std::tm tm_tp;
  16. tm_tp.tm_year = 2015 - 1900;
  17. tm_tp.tm_mon = 7; //0是一月,1是二月,···,7是8月
  18. tm_tp.tm_mday = 15;
  19. tm_tp.tm_hour = 19;
  20. tm_tp.tm_min = 19;
  21. tm_tp.tm_sec = 19;
  22. time_t t_tp = mktime(&tm_tp); //得到时间的整数值
  23. time_point<system_clock> chrono_tp = from_time_t(t_tp);
  24. }

std::tm结构 参考struct tm

chrono::system_clock

  std::chrono::system_clock表示当前的系统时钟,系统中运行的所有进程使用now()得到的时间是一致的。每一个clock类中都有确定的time_point, duration, Rep, Period类型。

chrono::system_clock::now

  1. static time_point now() noexcept; //获取当前时间time_point

chrono::system_clock::to_time_t

  1. static time_t to_time_t (const time_point& tp) noexcept;//time_point转换成time_t秒

example

  1. #include <iostream>
  2. #include <ctime>
  3. #include <ratio>
  4. #include <chrono>
  5. int main ()
  6. {
  7. using namespace std::chrono;
  8. duration<int,std::ratio<60*60*24> > one_day (1);
  9. system_clock::time_point today = system_clock::now();
  10. system_clock::time_point tomorrow = today + one_day;
  11. time_t tt;
  12. tt = system_clock::to_time_t ( today );
  13. std::cout << "today is: " << ctime(&tt);
  14. tt = system_clock::to_time_t ( tomorrow );
  15. std::cout << "tomorrow will be: " << ctime(&tt);
  16. return 0;
  17. }

chrono::system_clock::from_time_t

  1. static time_point from_time_t (time_t t) noexcept;

example

  1. #include <iostream>
  2. #include <ctime>
  3. #include <ratio>
  4. #include <chrono>
  5. int main ()
  6. {
  7. using namespace std::chrono;
  8. // create tm with 1/1/2000:
  9. std::tm timeinfo = std::tm();
  10. timeinfo.tm_year = 100; // year: 2000
  11. timeinfo.tm_mon = 0; // month: january
  12. timeinfo.tm_mday = 1; // day: 1st
  13. std::time_t tt = std::mktime (&timeinfo);
  14. system_clock::time_point tp = system_clock::from_time_t (tt);
  15. system_clock::duration d = system_clock::now() - tp;
  16. // convert to number of days:
  17. typedef duration<int,std::ratio<60*60*24>> days_type;
  18. days_type ndays = duration_cast<days_type> (d);
  19. // display result:
  20. std::cout << ndays.count() << " days have passed since 1/1/2000";
  21. std::cout << std::endl;
  22. return 0;
  23. }

  chrono最重要就是这几个类,本着够用的原则,其他等需要时再学习

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注