2009年3月29日星期日

【原】Boost库之timer的使用

我们在编程中有时需要计算运行某一段代码所花费的时间,通常的方法是通过计算该段代码首尾的GetTickCount的差值来获得。这种方法虽然可取,但需要调用两次GetTickCount函数,总让人觉得有些繁琐。Boost库的timer提供了对计时特性的封装,简化了代码的编写,并且它具有跨平台的优点。

Boost库的timer主要封装了timer、progress_timer和progress_display这3个计时类,使用起来非常简单,下面逐一介绍。

timer类的构造函数会在内部获得一个起始时间并开始计时,其elapsed成员函数会计算所消耗的时间,其restart函数重新开始计时。示例代码如下:
timer tx;
Sleep(1000);
cout << tx.elapsed() << endl;

progress_timer类是对timer类的进一步封装,使用起来更加方便,它会在析构函数中自动打印出所消耗的时间。示例代码如下:
{
progress_timer pro;
Sleep(1000);
}

progress_display类以图形化的方式给出了当前所花费的时间刻度占总时间刻度的比例。其构造函数为:
explicit progress_display(unsigned long expected_count, std::ostream &os = std::cout, conststd::string&s1="\n", const std::string & s2 = "", const std::string & s3 = "" );
其restart函数用于重新开始计时,count函数用于获得当前所花费的时间刻度,expected_count函数用于获得总的时间刻度。另外,progress_display类还重载了+=和前缀++操作符,用于增加当前的时间刻度值。示例代码如下:
progress_display pd(15, cout, "hello:\t", "hujian:\t", "Start:\t");
for (int i = 0; i < 15; i++)
{
Sleep(100);
++pd;
}

这3个类的实现比较短,均在timer.hpp和progress.hpp头文件中,大家有空可以阅读一下源代码,以加深对这3个类的理解。

1 条评论:

  1. 个人感觉这个timer封装的比较弱,就打印时间的前两个类会比较有用。如果boost能把定时器封装起来那就近乎完美了...

    回复删除