C++:模拟实现类似<time.h>的计时功能

C++:模拟实现类似<time.h>的计时功能

标签: 计时 time.h

by 小威威


既然要模拟<time.h>中的计时功能,我们首先当然要先了解<time.h>这个头文件—–>C/C++ time.h 的用法

我们知道,一般情况下,我们是通过调用<time.h>中的clock()函数以及利用CLOCKS_PER_SEC参数实现一个事件或者是代码运行的计时。那么,我们能不能自己写一个头文件来实现对一个事件的计时呢?

显然这是可以的,那就是通过变量增长实现事件计时,这也是<time.h>中这一计时功能的设计核心。

我们先定义一个全局变量_clock代表当前代码运行时刻(注意区分时间与时刻)。

static int _clock = 0

然后我们将代码运行的初始时刻定义为0(此时_clock在数值上就等于代码运行的时间,但是我们最好还是将它当作一个时刻)

接着设置一个clock_f()函数来实现_clock的增加。增加的量是执行一次函数所需要的时间。注意:这个时间的单位是block。block代表的是系统的计时单元。

然后不难想到需要两个标识点—start 和 finish 来记录事件的开始时刻与结束时刻。将这二者相减就是一个事件的运行时间,不过这个时间是以系统时间单元为单位的。因此,为了将其用我们一般的时间单位表示出来,还需要进行单位的换算。

此处就需要_CLOCKS_PER_SEC参数来实现转化了。这个参数代表每ms所代表的时间单元数。将以系统时间单元为单位的时间除以该参数就能将单位化成ms了。

还有一点需要注意的是:精度问题。单位换算不要忘记在乘上1.0以确保double精度。

这里再补充一下cout的格式化输出。
如若要保留小数点后三位有效数字,那么:

注意定义命名空间谷歌风格的问题:
记得在花括号的后面补上注释: // namespace XXX
XXX代表命名空间的名称

double a = 1.2323232;
cout << std::setiosflags(std::iOS::fixed) << std::setprecision(3) << a << endl;

下面呈现一道例题:


Carson write a simple program to solve Fabonaci and Factorial.
But he wants to know how it cost time when different inputs are given.
Now you are invited as an best expert to fix it.
Read main.cpp for details about the functions of 'timer.h'.

clock_f // the system provides a piece of time
>>>>>> TIC_TOC(namespace) <<<<<<
------ timer(class_1) ------
tic_f // start timing
toc_f // end timing
tictoc // print all the cost-time information(3 digits after the decimal point)
*Format:
line 0 - 1: 0.050ms
------ timer_controller(class_2) ------
# Used for storing timers
create<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值