Linux 时间函数 (time() clock() gettimeofday()) 简介与比较

Linux 时间函数 (time() / clock() / gettimeofday()) 简介与比较

  本文将对Linux系统时间函数gettimeofday()与标准库函数time() clock()进行简单介绍,并比较差异。

Introduction

  最近笔者的一个项目需要使用计时功能,同时使用POSIX的多线程函数进行多线程操作。在计时过程中,出现了一些Bug,导致计时结果错误。经过研究找到了问题,也由此发现了上述几个函数之间的差异。

Linux系统库 sys/time.h

系统库提供了计时器timer相关功能,以及下面介绍的函数gettimeofday()。另外,其中定义了一个描述更加精确时间的结构体timeval,定义如下:

struct timeval
{
  __time_t tv_sec;		/* Seconds.  */
  __suseconds_t tv_usec;	/* Microseconds.  */
};
  • tv_sec以秒为单位的时间
  • tv_usec以微秒为单位的时间
gettimeofday()

函数修改一个结构体struct timeval的值,原型声明如下:

int gettimeofday (struct timeval *__restrict __tv, 
                  void *__restrict __tz) __THROW __nonnull ((1));

功能:

  • timeval结构体中的
    • tv_sec置为距离当天开始的时间
    • tv_usec置为当前微秒数
    • 返回的是绝对时间

标准库time.h

标准库提供了一系列通用计时函数,如time() clock()等,其返回类型都以宏time_t定义,一般为long

clock_t clock (void);
time_t time (time_t *__timer);

time()

time()函数返回当前秒数。并将秒数放入__timer中(如果timer非空)。

clock()

返回程序目前使用的时间(user time + system time),以时钟跳数为单位,换算关系为:

sec = clock / CLOCKS_PER_SEC; //CLOCKS_PER_SEC 定义在time.h中

Compare

从上面加粗文本可以看出,clockgettimeofday两函数最大的区别是:

  • gettimeofday返回绝对时间,不受程序执行的影响
  • clock返回的是相对时间,是程序执行的时间

程序执行时间受到进程调度、阻塞等影响,而绝对时间不会。

所以,当需要统计包含子程序在内的时间时,还是需要以绝对时间相减的形式计算,而不能使用clock简单统计,clock只能统计父进程的执行时间。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值