《白话C++》第10章 STL和boost,Page194 10.10.2 boost::timer

boost::timer

boost提供了两个版本的计时器,第一版相当于是C++版本的clock(),原有跨平台问题或仍然存在。

我们直接学习第二版。这一版不同平台上提供了同一“CPU时间”概念。以下例子来自boost官方文档:

【重要】:boost链接库后缀

工程需要添加以下两个链接库:boost_timer-mgw81-mt-1_57和boost_system-mgw81-mt-1_57。

后面忽略编译环境与版本号,简称为“boost_timer”和“boost_system”库

还需要链接库:libboost_chrono-mgw81-mt-1_57.a

002行的库,必须指定timer子目录下的头文件,因为位置默认位置下的timer.hpp文件,暂时被旧版本所占用,

006行使用的auto_cpu_timer类,位于timer子空间内。意如其名,auto_cpu_timer会在它析构时,自动往指定的流(默认是cout),输出从它构造开始的时长信息

它表示:这段程序运行的总时长,如果用墙上的时钟来测量,那是0.827027s,而在计算机层面,系统在“用户空间”执行,花费0.843750s,在“内核空间”执行,花费0.0.000000s,合计0.843750是,占用墙上时钟102.0%。

【小提示】:什么叫“user space”,什么叫“kernel space”

这里的“用户”,不是指人,而是指普通应用程序,它们是操作系统的“进程用户”,现代操作系统通常会分配给每个进程独立的,虚拟的内存空间,称为“user space”,通常进程在这个空间中完成大部分工作。当需要分为一些公共资源时,必须向操作系统提请,获得权限后进入“内核空间”。

通过构造参数,可以方便的控制打印时间的小数位数,同样的代码,如果构造计时器对象参数为:

boost::timer::auto_cpu_timer t(2);

则打印内容变为:

还可以设置成输出到别的流,比如输出到文件流或内存流。最后,那个怪怪的全是英文的输出格式,也可以替换到,格式字符含义为:

(1)%w times.wall,即现实时钟(墙上的时钟);

(2)%u times.user,用户空间;

(3)%s times.system,内核空间时间;

(4)%t times.user + times.system,CPU时间;

(5)%p The percentage of times.wall represented by times.user + times.system,百分比。

综合示例:

三个链接库是带调试版的库:

libboost_timer-mgw81-mt-d-1_57.a

libboost_system-mgw81-mt-d-1_57.a

libboost_chrono-mgw81-mt-d-1_57.a

auto_cpu_timer是cpu_timer的派生类(典型的为了复用功能而派生),它在新增加自动输出到指定流的功能之外,也继承了基类的start(),stop(),resume(),elapsed()等功能。

写程序时,使用计时功能检测某段代码的运行功能是很经常的事,如果因为需要计时功能而引入boost库,有些麻烦。后面我们会提供基于STL的实现。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值