美文网首页
timer库概述

timer库概述

作者: 食梦狸猫 | 来源:发表于2019-04-03 22:54 被阅读0次

    timer库提供简易的度量时间和进度显示功能。
    boost的timer库有两个组件:timer使用的是标准C/C++库函数,cpu_timer使用操作系统的API精度更高。

    timer库库包含三个小组件:timers计时器,progress_timer,进度指示器progress_display

    timer

    timer类是一个小型计时器,提供毫秒级别的计时精度。

    #include <boost/timer.hpp>
    ....
    timer t;
    t.elapsed_max() //计时器能表示的最大值
    t.elapsed_min() //计时器能表示的最小值
    t.elapsed() //程序执行已经流逝的时间
    

    timer对象一旦被声明,它的构造函数就会开始计时工作。timer的计时用到了<ctime>的std::clock()函数,此函数会返回自进程启动以来的clock数。

    timer的精度依赖操作系统或编译器。适合要求不高的任务。不适合大跨度时间测量和跨平台。

    progress_timer

    progress_timer继承自timer,在析构时自动输出时间。progress_timer的默认输出是std::cout,可以在构造时指定输出流。

    stringstream ss;
    {
      progress_timer t(ss);
    }
    

    progress_display

    progress_display可以在控制台上显示程序的执行进度,且能提供一个友好的用户界面。构造函数接受一个进度基数。重载的+=和++用来增加技术,更新进度。

    #include <boost/progress.hpp>
    using namespace boost;
    .....
    vector<string> v(100);
    progress_display pd(v.size());
    
    for(auto& x : v )
    {
        cout<<x<<endl;
        ++pd;
    }
    
    

    date_time

    date_time库包括两个部分,分别是处理日期的gregorian和处理时间的posix_time

    #include<boost/date_time/gregorian/gregorian.hpp>
    #include<boost/date_time/posix_time/posix_time.hpp>
    
    • 处理日期
      空的构造函数会创建一个值为not_a_date_time的无效日期。顺序传入年月日值则创建一个对应的date对象.
    date d1; //not_a_date_time
    date d2 (2010,1,1);
    date d3 (2000,Jan,1);
    date d4 (d2);
    date d5 = from_string("1992-12-31");
    assert(d1 == date(not_a_date_time));
    assert(d2 == d4);
    assert(d3 < d4);
    

    day_clock是一个天级别的时钟,静态成员函数会返回一个当天的日期对象

    cout<<day_clock::local_day() <<endl;
    cout<<day_clock::universal_day() <<endl;
    
    • 访问日期
      date有返回年月日的成员函数
    date d(2014,1,1);
    assert(d.year() == 2014);
    assert(d.month() == 4);
    assert(d.day() == 1);
    date:: ymd_type ymd = d.year_month_day()
    //返回一个ymd对象
    assert(ymd.date == 4)
    
    • 日期输出
    to_simple_string(date d);
    
    • 转换为tm结构
      date支持和c的tm结构相互转换
    to_tm(date);
    date_from_tm(tm);
    
    • 日期长度
      日期长度是度量时间长度的一个标量。
      date_duration可以使用构造函数创建一个日期长度,成员函数days()返回时长的天数。
    days dd1(255);
    weeks w(3);
    months m(5);
    years y(2);
    
    • 日期运算
    date d1(2000,1,1);
    d1 += days(10);
    d1 -= years(10);
    
    • 日期区间
      date_period表示日期区间
    date_period dp1(date(2014,1,1),days(20));
    date_period dp2(date(2014,1,1),date(2013,1,1));
    
    • 日期迭代器
    date d(2006,11,26);
    day_iterator d_iter(d);
    ++d_iter;
    assert(d_iter == date(2006,11,27));
    
    year_iterator y_iter(*d_iter);
    ++y_iter;
    assert(y_iter->year() == 2014);
    
    week_iterator
    month_iterator
    ....
    
    • 一个简单的使用
      显示月历
    date d(2019,4,2);
    date d_start(d.year(),d.month(),1);
    date d_end = d.end_of_month();
    
    for(day_iterator d_iter(d_start); d_iter != d_end; ++d_iter)
    {
      cout<< *d_iter <<" "<<d_iter->day_of_week()<<endl;
    }
    

    处理时间

    • 时间长度
      time_duration精确到微秒,甚至纳秒
      time_duration的构造函数指定时分秒微秒来构造,超出的时间会自动进位或借位。也支持四则运算
    time_duration td(1,10,30,1000);
    hours h(1);
    minutes m (10);
    seconds s(30);
    milliseconds ms(1);
    
    time_duration td2 = h+m+s+ms;
    
    assert (td * 5 == td2 * 2);
    
    • 时间点
      创建ptime时同时指定date和time_duration,等一一个日期加当天时间偏移量.
    ptime p(date(2014,6,8),hours(1));
    ptime p1 = time_from_string("2014-6-8 01:00:00");
    
    • 操作时间点对象
      ptime = date+time_duration支持四则运算和字符串转换,还支持单向转换为tm/time_t结构
    ptime p1 = from_time_t(std::time(0));
    tm t = to_tm(p1);
    
    
    • 时间迭代器
    for(time_iterator t_iter(p, minutes(10)); t_iter < p + hours(1); ++ t_iter)
    ...
    

    相关文章

      网友评论

          本文标题:timer库概述

          本文链接:https://www.haomeiwen.com/subject/evkobqtx.html