boost之timer

1.timer类实现2.重点说明2.1CLOCKS_PER_SECtimer的计数使用了标准头文件<ctime>里的clock()函数,它返回自进程启动以来的clock计数,每

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1. timer类实现

#pragma once

#include <ctime>
#include <limits>  

class timer
{
public:
    timer(){ _start_time = clock(); }
    void restart(){ _start_time = clock(); }
    double elapsed() const
    {
        return (double)(clock() - _start_time) / CLOCKS_PER_SEC; 
    }
    double elapsed_min() const
    {
        return (double)(1) / (double)CLOCKS_PER_SEC;
    }
    double elapsed_max() const
    {
        return (double)(std::numeric_limits<clock_t>::max() - _start_time) / double(CLOCKS_PER_SEC);
        
    }
private:
    clock_t _start_time;
};

2. 重点说明

2.1 CLOCKS_PER_SEC

  timer的计数使用了标准头文件<ctime>里的clock()函数,它返回自进程启动以来的clock计数,每秒的clock数由宏CLOCKS_PER_SEC定义,CLOCKS_PER_SEC的值因操作系统而不同,在win32下是1000,而在linux下则是1000000,页就是说在win32下的精度是毫秒,在linux下的精度是微妙。

2.2 numeric_limits模版

  说白了,它是一个模板类,它主要是把C++当中的一些内建型别进行了封装,比如说numeric_limits<int>是一个特化后的类,从这个类的成员变量与成员函数中,我们可以了解到int的很多特性:可以表示的最大值,最小值,是否是精确的,是否是有符号等等。如果用其他任意(非内建类型)来特化这个模板类,比如string,string怎么可能有最大值?我们从MSDN上可以了解到,这对string,成员变量与成员函数是没有意义的,要么返回0要么为false。 

  参考博客:http://blog.163.com/wujiaxing009%40126/blog/static/7198839920124135147911/

2.3 使用建议

  timer不适合高精度的时间测量任务,它的精度依赖操作系统或编译器,难以做到跨平台,timer也不适合大跨度时间段的测量,可提供的最大时间跨度只有几百个小时,如果需要以天、月甚至年作为时间的单位则不能使用timer,应使用date_time.

3. 扩展new_progress_timer

3.1 代码实现

template<int N = 2>
class new_progress_timer : public timer
{
public:
    new_progress_timer(ostream &os = cout)
        :m_os(os)
    {

    }

    ~new_progress_timer()
    {
        try
        {
            // 保存流的状态
            ostream::fmtflags old_flags = m_os.setf(ostream::fixed, ostream::floatfield);
            streamsize old_prec = m_os.precision(N);

            // 输出时间
            m_os << elapsed() << "s\n" << endl;

            // 恢复流状态
            m_os.flags(old_flags);
            m_os.precision(old_prec);
        }
        catch (...){}
    }
private:
    ostream &m_os;   // 需要特别注意
};

继承于timer类,主要实现输出时间的精度控制

注意代码的最后一行,原因是:

protected:
    __CLR_OR_THIS_CALL basic_ostream(_Myt&& _Right)
        {    // construct by moving _Right
        _Myios::init();
        _Myios::move(_STD move(_Right));
        }

    _Myt& __CLR_OR_THIS_CALL operator=(_Myt&& _Right)
        {    // move from _Right
        this->swap(_Right);
        return (*this);
        }

    void __CLR_OR_THIS_CALL swap(_Myt& _Right)
        {    // swap with _Right
        if (this != &_Right)
            _Myios::swap(_Right);
        }

public:
    __CLR_OR_THIS_CALL basic_ostream(const _Myt&) = delete;
    _Myt& __CLR_OR_THIS_CALL operator=(const _Myt&) = delete;

 

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120120.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月28日 下午2:00
下一篇 2021年12月28日 下午3:00


相关推荐

  • 两个∑符号,两个∏符号运算公式

    两个∑符号,两个∏符号运算公式两个 符号 两个 符号运算 符号的意思是累加 符号的意思是累乘 比如两个这种符号怎么运算呢 一个 i 1ni sum i 1 n i i 1n i 就是一个累加而已 等于 n 1 n 2 frac n 1 n 2 2 n 1 n 我们可以把 j 1nj sum j 1 n j j 1n j 当做常数 提出来 变成了 j 1nj sum j 1 n

    2026年3月18日
    2
  • 有趣的python代码_python五角星代码

    有趣的python代码_python五角星代码原标题:使用Python代码的程序员也浪漫代码也浪漫:用Python放一场圣诞节烟花秀!天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。这个有趣的小项目并不复杂,只需一点可视化技巧,100余行Python代码和程序库Tkinter,最后我们就能达到下面这个效果:学完本教程后,你也能做…

    2026年3月3日
    3
  • one-api one-api 配置讯飞星火大模型的几点注意事项

    one-api one-api 配置讯飞星火大模型的几点注意事项

    2026年3月14日
    2
  • 摘星-上升篇

    以下内容均来自阳光占星,如有冒犯,告知删除!上升金牛——歌者的哼唱有这么一类人,可能有着细致柔和的五官,容易发胖的体质以及坚定的眼神。有点害羞与腼腆;喜欢哼唱着小曲,不喜欢拥挤的人群而喜欢宁静的自然。这样的一群人就是生活在我们身边的上升金牛。他们喜欢舒缓的生活节奏,喜欢按照自己的节奏去一点点的完成计划,不喜欢突如其来的变动扰乱了自己的生活。金牛是一个喜欢稳定和安逸的星座,并且由于金牛的守护星为金星,上升金牛也诞生出更多的艺术色彩。但上升金牛的审美一直被吐槽,旁人就必须忍受他那万年…

    2022年4月6日
    76
  • 微信沙雕功能“炸屎”上线!网友:满屏的粑粑真可爱

    微信沙雕功能“炸屎”上线!网友:满屏的粑粑真可爱点击上方 码农突围 马上关注这里是码农充电第一站 回复 666 获取一份专属大礼包真爱 请设置 星标 或点个 在看在微信的 8 0 版本里 表情就已经会动了 狗头 表情耳朵会动一动

    2026年3月18日
    2
  • Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符解决方法[通俗易懂]

    Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符解决方法[通俗易懂]对于这个问题,对于我这种初学者来说是经常遇到的,今天就把可靠的解决发法记于此,希望能帮助到大家。ORA-12154:TNS:无法解析指定的连接标识符第一步:查看自己的Oracle服务是否打开。OracleDBConsoleORCL是Oracle网页端管理工具的服务,访问地址一般为“http://127.0.0.1:1158/em/console/logon/logon”,如果不习惯用…

    2022年7月19日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号