关于获取时间戳函数gettimeofday的用法小结

Linux下gettimeofday函数

2020年6月8日16点33分

函数头文件及原型为:

#include<sys/time.h>
int gettimeofday(struct  timeval*tv,struct  timezone *tz )

参数:

struct  timeval{
       long  tv_sec;/*秒*/
       long  tv_usec;/*微妙*/
}struct  timezone{
        int tz_minuteswest;/*和greenwich时间差*/
        int tz_dsttime; 
}

习惯用法:

	struct timeval start;

    gettimeofday(&start,NULL); 
    printf("time is %ld ms\n", start.tv_sec*1000 + start.tv_usec/1000);

后面可以再声明一个类似的end参数,通过end与start相减,可以获得两次调用gettimeofday函数之间代码执行的时间。

注意点

以上代码在64位linux下执行正常,在32位linux嵌入式设备上执行结果有问题,可能是32位与64位系统中,long类型能够保存的数据长度不同导致。

32位系统中long占4个字节,64位系统中long占8个字节。

若想在32位linux嵌入式设备上正常获取毫秒级时间戳,需要加上强制类型转换,如下所示:

	struct timeval start;

    gettimeofday(&start,NULL); 
    printf("time is %lld ms\n", (long long)(start.tv_sec)*1000 + (long long)(start.tv_usec)/1000);

获取函数执行时间示例

	struct timeval start, end;
	
	gettimeofday(&start,NULL); 
	myfun();
	gettimeofday(&end,NULL); 
	//以整数显示微秒
	printf("use %lld us\n", (long long)(end.tv_sec-start.tv_sec)*1000*1000 + (long long)(end.tv_usec-start.tv_usec));
	//以整数显示毫秒
	printf("use %lld ms\n", (long long)(end.tv_sec-start.tv_sec)*1000 + (long long)(end.tv_usec-start.tv_usec)/1000);
    //以浮点数显示毫秒
	printf("use %lf ms\n", ((long long)(end.tv_sec-start.tv_sec)*1000*1000 + (long long)(end.tv_usec-start.tv_usec))*1.0/1000);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值