您的位置:首页 > 运维架构 > Linux

Linux C语言 高精度时间函数:gettimeofday()

2017-09-28 16:23 706 查看
简介:

为了获取某函数调用耗时.在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微秒, 且在x86-64平台gettimeofday()已不是系统调用,不会陷入内核, 多次调用不会有性能损失.

函数原型:

#include<sys/time.h>

int gettimeofday(struct  timeval*tv,struct  timezone *tz )


说明:

<1>.gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中

<2>.struct timeval结构体为时间变量, 包括两个成员变量:tv_sec(秒), tv_usec(微秒); 第二个结构体为时区, 本示例没有用到可以置为NULL.

struct  timeval{
long  tv_sec;/*秒*/
long  tv_usec;/*微妙*/
};
struct  timezone{
int tz_minuteswest;/*和Greewich时间差了多少分钟*/
int tz_dsttime;/*type of DST correction*/
}


代码示例:

struct timeval tvBegin, tvEnd;
gettimeofday(&tvBegin, NULL);
//耗时函数执行...
gettimeofday(&tvEnd, NULL);
//<1>.获得毫秒数:
double dDuration = 1000 * (tvEnd.tv_sec - tvBegin.tv_sec) + ((tvEnd.tv_usec - tvBegin.tv_usec) / 1000.0);
//<2>.获得秒数:
double dDuration = (tvEnd.tv_sec - tvBegin.tv_sec) + ((tvEnd.tv_usec - tvBegin.tv_usec) / 1000.0) / 1000.0;


注意: 获得秒数时, 分母需要为 1000.0, 如果是1000, 则返回整数,这样就不精确了.

原因:

相同数据类型的数据、变量进行运算,结果保持原有数据类型。

当不同数据类型的数据、变量进行运算时,结果为精度高的数据类型。

例如:1/2 的结果为0; 1.0/2 的结果为 0.5

C语言其它时间函数(Linux&Win)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 函数 linux