时间和日期

2023-11-13

Boost使用的timer和data_timerj进行对应和时间日期相关的出来文档,timer包含三个组件,分别为timer,progress_timer以及对应的progress_display.

timer

timer可以测量运行时间

timer类摘要

lass timer
{
    public:
    timer() { _start_time = std::clock(); } // postcondition: elapsed()==0
    //         timer( const timer& src );      // post: elapsed()==src.elapsed()
    //        ~timer(){}
    //  timer& operator=( const timer& src );  // post: elapsed()==src.elapsed()
    void   restart() { _start_time = std::clock(); } // post: elapsed()==0
    double elapsed() const                  // return elapsed time in seconds
    { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }

    double elapsed_max() const   // return estimated maximum value for elapsed()
    // Portability warning: elapsed_max() may return too high a value on systems
    // where std::clock_t overflows or resets at surprising values.
    {
        return (double((std::numeric_limits<std::clock_t>::max)())
            - double(_start_time)) / double(CLOCKS_PER_SEC); 
            }

            double elapsed_min() const            // return minimum value for elapsed()
            { return double(1)/double(CLOCKS_PER_SEC); }

            private:
            std::clock_t _start_time;
            }; // timer

            } // namespace boost

demo1

#include <boost/timer.hpp>
#include <iostream>

using namespace boost;
int main(int argc, char const *argv[])
{
    timer t;
    std::cout << "max timespan:" << t.elapsed_max() << std::endl;
    std::cout << "min timespan:" << t.elapsed_min() << std::endl;
    std::cout <<"now time elapsed:" << t.elapsed()<< "s" <<std::endl;


    return 0;
}

输出的结果

$ ./a.out 
max timespan:9.22337e+12
min timespan:1e-06
now time elapsed:0.000256s

progress_timer

progress_timer测量经过的时间(使用计时器),销毁时显示。其继承于timer

progress_timer类摘要

class progress_timer : public timer, private noncopyable
{

public:
explicit progress_timer( std::ostream & os = std::cout )
// os is hint; implementation may ignore, particularly in embedded systems
: timer(), noncopyable(), m_os(os) {}
~progress_timer()
{
    //  A) Throwing an exception from a destructor is a Bad Thing.
    //  B) The progress_timer destructor does output which may throw.
    //  C) A progress_timer is usually not critical to the application.
    //  Therefore, wrap the I/O in a try block, catch and ignore all exceptions.
    try
        {
            // use istream instead of ios_base to workaround GNU problem (Greg Chicares)
            std::istream::fmtflags old_flags = m_os.setf( std::istream::fixed,
            std::istream::floatfield );
            std::streamsize old_prec = m_os.precision( 2 );
            m_os << elapsed() << " s\n" // "s" is System International d'Unites std
                << std::endl;
            m_os.flags( old_flags );
            m_os.precision( old_prec );
        }

    catch (...) {} // eat any exceptions
} // ~progress_timer

private:
std::ostream & m_os;
};

demo2例子

#include <boost/progress.hpp>
#include <iostream>
using namespace std;
using namespace boost;

void cost_timer(){
    boost::progress_timer t;
    int i = 0;
    while (i < 10000000)
    {
        i++;
    }
    return;
    
}
int main(int argc, char const *argv[])
{
    cost_timer();

    return 0;
}

输出结果

 ./boost_timer_demo2 
0.05 s

progress_display

显示已知目标的进度指示。

progress_display类摘要

class progress_display : private noncopyable
{
 public:
  explicit progress_display( unsigned long expected_count_,
                             std::ostream & os = std::cout,
                             const std::string & s1 = "\n", //leading strings
                             const std::string & s2 = "",
                             const std::string & s3 = "" )
   // os is hint; implementation may ignore, particularly in embedded systems
   : noncopyable(), m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count_); }

  void           restart( unsigned long expected_count_ )
  //  Effects: display appropriate scale
  //  Postconditions: count()==0, expected_count()==expected_count_
  {
    _count = _next_tic_count = _tic = 0;
    _expected_count = expected_count_;

    m_os << m_s1 << "0%   10   20   30   40   50   60   70   80   90   100%\n"
         << m_s2 << "|----|----|----|----|----|----|----|----|----|----|"
         << std::endl  // endl implies flush, which ensures display
         << m_s3;
    if ( !_expected_count ) _expected_count = 1;  // prevent divide by zero
  } // restart

  unsigned long  operator+=( unsigned long increment )
  //  Effects: Display appropriate progress tic if needed.
  //  Postconditions: count()== original count() + increment
  //  Returns: count().
  {
    if ( (_count += increment) >= _next_tic_count ) { display_tic(); }
    return _count;
  }

  unsigned long  operator++()           { return operator+=( 1 ); }
  unsigned long  count() const          { return _count; }
  unsigned long  expected_count() const { return _expected_count; }

  private:
  std::ostream &     m_os;  // may not be present in all imps
  const std::string  m_s1;  // string is more general, safer than 
  const std::string  m_s2;  //  const char *, and efficiency or size are
  const std::string  m_s3;  //  not issues

  unsigned long _count, _expected_count, _next_tic_count;
  unsigned int  _tic;
  void display_tic()
  {
    // use of floating point ensures that both large and small counts
    // work correctly.  static_cast<>() is also used several places
    // to suppress spurious compiler warnings. 
    unsigned int tics_needed = static_cast<unsigned int>((static_cast<double>(_count)
        / static_cast<double>(_expected_count)) * 50.0);
    do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed );
    _next_tic_count = 
      static_cast<unsigned long>((_tic/50.0) * static_cast<double>(_expected_count));
    if ( _count == _expected_count ) {
      if ( _tic < 51 ) m_os << '*';
      m_os << std::endl;
      }
  } // display_tic
};

demo使用例子

#include <boost/progress.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;
using namespace boost;

int main(int argc, char const *argv[])
{
    
    vector<string> v(100);
    for(int i = 0; i < 100 ; i++){
        v[i] = i;
    }
    ofstream fs("demo.txt");
    progress_display pd(v.size());
    vector<string>::iterator pos;
    for (pos = v.begin(); pos < v.end(); pos++)
    {
        fs << *pos;
        ++pd;
    }
    
    return 0;
}

输出的结果为:

$ ./boost_timer_demo3

0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时间和日期 的相关文章

  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 是否可以使用 javascript 测试用户的浏览器/操作系统是否支持给定类型的链接?

    是否可以使用 javascript 或其他任何东西 测试用户的操作系统 浏览器是否支持给定的 url 方案 例如 大多数仅使用网络邮件的用户计算机上未设置 mailto 是否有可能以某种方式捕获单击 mailto 链接的尝试并弹出比浏览器错
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 单击关闭按钮后不显示 Google 一键登录 UI

    我正在尝试按照本指南使新的谷歌一键登录工作 https developers google com identity one tap web https developers google com identity one tap web
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式

随机推荐

  • stl_set

    begin 返回指向第一个元素的 迭代器 clear 清除所有元素 size 集合中元素的数目 count 返回某个值元素的个数 empty 如果集合为空 返回true 真 end 返回指向最后一个元素之后的迭代器 不是最后一个元素器 in
  • vue 省市区三级联动选择 pc端项目插件element-china-area-data(非常推荐)

    使用步骤 1 npm install element china area data S 2 import provinceAndCityData regionData provinceAndCityDataPlus regionDataP
  • 解决挂载ext4格式文件系统错误 JBD2: Unrecognised features on journal问题

    1 mount demo img mnt dmesg 报如下错误 1479130 280508 JBD2 Unrecognised features on journal 1479130 280512 EXT4 fs loop1 error
  • python 如果你的年龄大于18_python基础

    在python是空格是很重要的比如 如果在print前面加一个空格就会报错 在python中你必须顶格写 if 要判断的条件 条件成立时要执行的事情 图1 在图1中要判断的条件是年龄是不是大于18岁 大于18岁就可以去酒吧了 else语句配
  • Qt实现简单的显示网页(QtWebkit、QtWebEngine、QAxWidget)

    首先先说说QtWebkit QtWebEngine QAxWidget三种方式显示网页的应用场景 QtWebkit 在Qt5 6以前 都是使用QtWebkit组件 但Qt5 6以后 移除了QtWebkit这个组件 QtWebEngine Q
  • 握手信号valid/ready的打拍技巧

    一 前言 valid和ready信号 尤其是ready信号的时序一般很差 因为它通常是接收端通过组合逻辑输出的 当流水线的级数较多时 ready反压信号一级一级往前传递 时序将会变得更差 为了优化时序 通常需要对valid和ready信号进
  • Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测

    Pyhton OpenCV对象检测之 Haar级联人脸及眼睛检测 1 效果图 2 原理 2 1 Haar人脸检测原理 2 2 Haar级联预训练的模型 3 源码 3 1 图像面部及眼睛检测 3 2 视频帧面部及眼睛检测 参考 这篇博客将介绍
  • CMD找不到Python?

    前言 当我们费完一牛一虎之力给我们的Windows装上python后 却发现在CMD中输入python时发生这样一幕 D gt python python 不是内部或外部命令 也不是可运行的程序或批处理文件 那么这就需要来Look一下这篇文
  • shell中条件判断单双中括号&数值比较&字符串比较

    文章目录 条件判断中的单双中括号 单中括号 双中括号 背景 在修改centreon监控脚本的时候发现shell脚本中if判断条件使用的几点疑问 遂记录 条件判断中的单双中括号 样例1如下 判断当前小时 24小时制 是否大于2点 time d
  • [Interview系列 知识储备回顾] 集合篇 - Map[1]

    concurrentHashMap考点分析 concurrentHashMap在JDK 1 7怎么解决线程安全 concurrentHashMap在JDK 1 8怎么解决线程安全 concurrentHashMap在JDK 1 7怎么解决线
  • JeeSite数据权限控制解决方案

    支持如下数据范围设置 所有数据 所在公司及以下数据 所在公司数据 所在部门及以下数据 所在部门数据 仅本人数据 按明细设置 特殊情况下 跨机构授权 User user UserUtils getUser 使用标准查询 DetachedCri
  • 【python设置临时环境变量】export PYTHONPATH=$(pwd):${PYTHONPATH}

    PYTHONPATH是Python搜索路径 默认我们import的模块都会从PYTHONPATH里面寻找 打印PYTHONPATH import os print sys path gt usr local lib python2 7 di
  • 机器学习之朴素贝叶斯

    朴素贝叶斯 贝叶斯法则 条件独立 如果P X Y Z P X Z P Y Z 或等价地P X Y Z P X Z 则称事件X Y对于给定事件Z是条件独立的 也就是说 当Z发生时 X发生与否与Y发生与否是无关的 朴素贝叶斯 假设每个输入变量独
  • Qt + OpenGL 教程(六):旋转的几种方法(自动旋转、键盘控制、鼠标控制旋转)

    总结了几种旋转的方法 自动旋转 利用计时器 每隔一段时间重新绘制屏幕 实现旋转 键盘控制 点击某个按键 旋转某一角度 鼠标控制 围绕y轴 跟随鼠标旋转 目前只是围绕y轴旋转 不能按任意轴旋转 代码分别为 以后补充
  • ORB_SLAM2 源码解析 特征匹配 (五)

    目录 一 单目初始化中的特征匹配SearchForInitialization 二 跟踪 TrackwithModel TrackReferenceKeyFrame 三 词袋介绍BoW 1 直观理解词袋 2 词袋基本思想 3 从字典结构到k
  • 使用D3.js实现框选节点并进行多节点拖动

    最近再使用d3 js关系图形展示时 需要选中多节点并进行拖动 一开始并不知道D3提供了此API 下面是我结合项目业务整理的框选操作的重点方面的应用 这是d3提供的api 使用鼠标或触摸选择一维或二维区域 可参考示例 https blockb
  • Unity 使用 Dotween 的 Sequence 制作UI动画并且可重复利用

    目录 前言 一 DOTween是什么 二 使用步骤 1 导入DOTween 2 配置DOTween 3 使用代码编写动画 4 代码API解释 总结 前言 DOTween可以制作简易的UI动画 避免创建大量的Animator 本篇文章介绍一下
  • Spring Boot + k8s 最佳实践

    前言 K8s Spring Boot实现零宕机发布 健康检查 滚动更新 优雅停机 弹性伸缩 Prometheus监控 配置分离 镜像复用 配置 健康检查 健康检查类型 就绪探针 readiness 存活探针 liveness 探针类型 ex
  • 书店管理系统

    设计一个书店管理系统 能完成书店的日常管理工作 要求完成的基本功能 1 进货入库记录 2 销售出货记录 3 图书信息查询 可通过书名 作者等途径查询某本图书的详细信息 含书名 作者 出版社 页数 最新入库时间 库存量 价格等 4 自动预警提
  • 时间和日期

    Boost使用的timer和data timerj进行对应和时间日期相关的出来文档 timer包含三个组件 分别为timer progress timer以及对应的progress display timer timer可以测量运行时间 t