c++ boost库之timer相关类

4 篇文章 0 订阅

 1. 概述

 timer库包含三个组件,分别是timer,progress_timer,progress_display;

 

2. 头文件

timer类头文件为: #include <boost/timer.hpp>
后两个头文件为:  #include <boost/progress.hpp>

 

 3. 使用示例

timer示例

timer t;
	
for(int i = 0; i < 100000000; i++){
	for(int j = 0; j < 30; j++){
	}
}
cout << "elapsed: " << t.elapsed()  << "s" << endl; 
//elapsed: 3.85019s

cout << "Max " << t.elapsed_max()/3600	<< "h  Min: " << t.elapsed_min() << "s" << endl;
//Max 2.56205e+09h  Min: 1e-06s

 progress_timer示例:

{
	progress_timer t;
	for(int i = 0; i < 100000000; i++){
		for(int j = 0; j < 30; j++){
		}
	}
} //3.81 s


//#include <sstream>
stringstream ss;
{
	progress_timer t(ss);
	for(int i = 0; i < 100000000; i++){
		for(int j = 0; j < 30; j++){
		}
	}
} //3.81 s
cout << ss.str() << endl;

 progress_timer 只能实现两位精度打印,若要实现更高的,可从写并修改代码中的precision参数;

progress_display 示例:

作用: 可在控制台上显示程序的执行进度;

vector<int> v(100000000);
progress_display pd(v.size());

vector<int>::iterator iter;
for(iter = v.begin(); iter!= v.end(); ++iter){
	++pd;
}

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




vector<int> v(100000000);
progress_display pd(v.size(),std::cout ,"%%%","+++","???");

vector<int>::iterator iter;
for(iter = v.begin(); iter!= v.end(); ++iter){
	++pd;//调用了progress_display 的++重载
}

打印:
%%%0%	10	 20   30   40	50	 60   70   80	90	 100%
+++|----|----|----|----|----|----|----|----|----|----|
???***************************************************

4. 源码分析

//noncopyable:继承后的派生类不可拷贝或赋值;
class progress_timer : public timer, private noncopyable
{
  
 public:
  //输出流可自定义
  explicit progress_timer( std::ostream & os = std::cout )
     : timer(), noncopyable(), m_os(os) {}

  //析构是自动计算时间  
  ~progress_timer()
  {
    try
    {
	  /*
	  		通过设置格式标志来控制输出形式;
			std::istream::fixed: 用正常的记数方法显示浮点数;
			std::istream::floatfield:小数点后保留6位小数;
	  */
      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;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这里为您提供一段使用C语言编写的使用定时器0实现延迟精准定时程序初始化的代码,代码如下: ```c #include <reg52.h> //包含单片机头文件 void delay(unsigned int time_ms); //函数声明 void main() { TMOD &= 0xF0; //设置计数器0为工作方式1 TMOD |= 0x01; TH0 = 0xFC; //设置计数器0的初值 TL0 = 0x67; TR0 = 1; //启动计数器0 while(1) { delay(1000); //调用延时函数延时1秒 P0 = ~P0; //P0口取反 } } void delay(unsigned int time_ms) { unsigned int i, j; for(i = time_ms; i > 0; i--) for(j = 110; j > 0; j--); } void timer0() interrupt 1 //定时器0中断服务函数 { TH0 = 0xFC; //重新设置计数器0的初值 TL0 = 0x67; } ``` 这段代码使用定时器0来实现延迟精准的定时程序初始化,其中: - `TMOD &= 0xF0;` 和 `TMOD |= 0x01;` 表示设置计数器0为工作方式1,即16位定时器模式; - `TH0 = 0xFC` 和 `TL0 = 0x67` 表示设置计数器0的初值为65535-45875,即计数器0从45875开始计数,计满65535后溢出; - `TR0 = 1` 表示启动计数器0; - `delay(unsigned int time_ms)` 是一个延时函数,其中 `time_ms` 表示要延时的毫秒数,通过嵌套循环实现精准的延时; - `timer0() interrupt 1` 是定时器0的中断服务函数,在计数器0溢出时会触发中断,通过重新设置计数器0的初值实现定时效果。 在 `main()` 函数中,我们可以通过调用 `delay(1000)` 函数来实现精准的1秒延时,然后通过 `P0 = ~P0` 来使P0口的输出取反,从而实现定时的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天未及海宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值