Boost中的Timer的使用——计算时间流逝

使用Boost中的Timer库计算程序的执行时间

程序开发者都会面临一个共同的问题,即写出高质量的代码完成特定的功能。评价代码质量的一个重要标准就是算法的执行效率,也就是算法的执行时间。为了可靠的提高程序的执行效率,首先要知道执行程序所消耗的时间,然后找出可行的方案对程序进行优化。C++程序员在开发代码的过程中难免会遇见此类问题,本文以Boost中的Timer库为例,详细讲解如何测量程序的执行时间。

Boost中Timer库的介绍

Timer是Boost中的一个很小的时间库,提供时间度量和进度显示功能,其中包含三个组件:(1)计时器类timer、timer类的子类progress_timer类和进度指示类progress_display。

1、 timer

timer位于boost命名空间中,使用之前需要包含头文件<boost/timer.hpp>

timer中有3个函数,分别为:(1)elapsed_max(),返回可度量的最大时间间隔;(2)elapsed_min(),返回可度量的最小时间间隔;(3)elapsed(),返回timer类创建到elapsed()函数调用时所流逝的时间。

例如采用timer类测量std::cout<<"helloworld"<<std::endl;语句的执行时间,程序如下所示:

#include<iostream>

#include<cstdlib>

using namespace std;

#include <boost/timer.hpp>

using namespace boost;

int main(int argc, char ** argv)

{

timer ter; //创建对象时就开始计时

std::cout<<"helloworld"<<std::endl;

std::cout<<ter.elapsed()<<std::endl;//输出程序执行所消耗的时间,以秒为单位。

std::cout<<ter.elapsed_max()<<std::endl;//输出timer类能够度量的最大时间间隔,以秒为单位。

std::cout<<ter.elapsed_min()<<std::endl;//输出timer类能够度量的最小时间间隔,以秒为单位。

return EXIT_SUCCESS;

}

程序执行结果如下图所示:

2 、 progress_timer类

progress_timer类是timer类的子类,此类具有一定的特殊性,在系统对此类对象进行析构时会自动调用此类的elapsed()函数,输出系统执行程序所消耗的时间。

使用progress_timer类需要包含<boost/progress.hpp>头文件

#include <iostream>

#include <cstdlib>

using namespace std;

#include <boost/progress.hpp>

using namespace boost;

int main(int argc, char **argv)

{

boost::progress_timer pt;

std::cout<<"helloworld"<<std::endl;

std::cout<<pt.elapsed()<<std::endl;//手动调用elapsed()函数,输出程序执行时间

return EXIT_SUCCESS;

}

结果如下图所示:

3、progress_display类

progress_display类用于显示程序的执行进度,使得用户获得动态感。

使用前需要包含<boost/progress.hpp>头文件

#include <iostream>

#include <cstdlib>

#include <vector>

using namespace std;

#include <boost/progress.hpp>

using namespace boost;

int main(int argc, char **argv)

{

std::vector<int> vec(10000);

//申明进度条

boost::progress_display pd(vec.size());

for (int i=0; i<100; i++)

{

vec.push_back(i);

}

return EXIT_SUCCESS;

}

程序执行结果如下图所示:

Boost中的Timer的使用——计算时间流逝

时间: 2024-10-31 04:25:28

Boost中的Timer的使用——计算时间流逝的相关文章

boost.asio系列——Timer

同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include <iostream>    #include <boost/asio.hpp> int main()    {        boost::asio::io_service io;        boost::asio::deadline_timer timer(io, boost::posix_time::s

C#中的Timer和DispatcherTimer使用实例

Timer组件是基于服务器的计时器,通过设置时间间隔Interval,周期性的触发Elapsed事件. 用法如下: 代码如下: class Program { static System.Timers.Timer Timer1 = new System.Timers.Timer(); static void Main() { Timer1.Interval = 1000; Timer1.Elapsed += new ElapsedEventHandler(PeriodicTaskHandler)

JDK中的Timer和TimerTask详解

目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedRate 一些注意点 1. Timer和TimerTask Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务. 2.

qt中定时器Timer的使用

qt中定时器Timer的使用,布布扣,bubuko.com

boost中自动确定数据类型(BOOST_TYPEOF和BOOST_AUTO)的使用

#include<boost/typeof/typeof.hpp> #include<vector> #include<iostream> #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() //为了注册新的数据类型 using namespace std; namespace ex{ //定义新的数据类型 struct demo_class { int a,b; }; BOOST_TYPEOF_REGISTER_T

MachingLearning中的距离和相似性计算以及python实现

在机器学习中,经常要用到距离和相似性的计算公式,我么要常计算个体之间的差异大小,继而评价个人之间的差异性和相似性,最常见的就是数据分析中的相关分析,数据挖掘中的分类和聚类算法.如利用k-means进行聚类时,判断个体所属的类别,要利用距离计算公式计算个体到簇心的距离,如利用KNN进行分类时,计算个体与已知类别之间的相似性,从而判断个体所属的类别等. 文章编辑的过程中或许存在一个错误或者不合理的地方,欢迎指正. 参考:http://www.cnblogs.com/heaad/archive/201

ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件

本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档. 主要内容 在多个UpdatePanel中使用Timer控件 1.添加一个新页面并切换到设计视图. 2.如果页面没有包含ScriptManager控件,在工具箱中的AJAX Extensions标签下双击ScriptManager控件添加到页面中. 3.双击Timer控件添加到Web页面中.Timer控件可以作为Update

使用boost中的property_tree实现配置文件

property_tree是专为配置文件而写,支持xml,ini和json格式文件 ini比较简单,适合简单的配置,通常可能需要保存数组,这时xml是个不错的选择. 使用property_tree也很简单,boost自带的帮助中有个5分钟指南 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_propertytree/tutorial.html 这里写一下使用xml来保存多维数组,在有些情况下一维数组并不能满足要求. 举个简单的例子吧: xm

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));            m_l