class timer{ public: timer(){_start_time = std::clock();} void restart(){_start_time = std::clock();} double elapsed()const{ return double(std::clock()-_start_time)/CLOCKS_PER_SEC; } double elpsed_min()const{ return double(1)/double(CLOCKS_PER_SEC); } double elspsed_max()const{ return (double((std::numberic_limits<std::clock_t>::max)())-double(_start_time))/double(CLOCKS_PER_SEC); } private: std::clock_t _start_time; }
以上是boost中关于time的类源码。该类接口简单,使用轻巧,可使用与大部分计时任务。
源代码中使用c++标准库头文件<ctime>中的std::clock()函数,该函数返回自进程启动以来的clock数,而每一秒的clock数则是由宏定义CLOCKS_PER_SEC决定,该宏定义的值因操作系统而异,Win32下是1000即精度为毫秒,Linux下则为1000000即精度为微妙。
timer的构造函数中记录了当前的clock数作为计时起点,并将起点记录在私有变量_start_time中,每当调用elapsed方法时,获取此时的clock数值,然后减去起点时的clock值就是流失的clock数值差,然后除以宏定义CLOCKS_PER_SEC转换成系统精度的时间。
timer::restart()
方法重新设置计时起点值,即std::clock()获取当前的clock数赋值给_start_time。
timer::elapsed_min()
用于获取该类能够获取的最小时间单位。即CLOCKS_PER_SEC宏定义的倒数。
timer::elapsed_max()
同理获取时间的最大单位。该方法中使用了标准库中的数值极限类numberric_limits来获取系统能容纳最大的clock数,然后减去起点的_start_time来计算可能的最大clock差值,除以宏定义CLOCKS_PER_SEC转换以下时间单位。
你可能会发现该类没有析构函数,这是因为该类中只有一个std::clock_t类型的私有属性,并没有什么资源可以释放,所以不写也是非常明智的抉择。
由此可以看出该类的局限性:如果时间跨度过大,则该类就无法实现时间的测量了。这要依赖于另一个时间类date_time类。明天见<点击这里哦!!!>
时间: 2024-10-05 23:02:17