时间获取函数封装--linux/unix

旧巷老猫 提交于 2019-12-12 12:19:57

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

项目开发中在提高程序效率时,首先要定位到代码那个部分耗费时间较长,进而改进代码--缩短执行时间。这就要一个时间获取函数来准确获取时间,在linux/unix系统都有对应的时间获取函数,不过要对其转换封装才可以得到我们想要且看得懂的数值,下例是以封装gettimeofday()函数和struct timeval结构体获取的时间获取函数。

#include <sys/time.h>    #include <unistd.h>

定义函数:int gettimeofday (struct timeval * tv, struct timezone * tz);
函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。

timeval 结构定义为:
struct timeval{
    long tv_sec;  //秒
    long tv_usec;  //微秒
};

timezone 结构定义为:
struct timezone
{
    int tz_minuteswest;  //和Greenwich 时间差了多少分钟
    int tz_dsttime;  //日光节约时间的状态
};

很多时候不要第二个参数值,所以一般都设置为‘NULL

//返回值是微妙单位

UB8 ldw_time()

{

    UB8 tm;

    struct timeval tv;

    gettimeofday(&tv, NULL);

    tm = tv.tv_sec * 1000000 + tv.tv_usec;

    return tm;

也可以将封装好的时间获取函数用宏定义,宏定义是在预处理时处理的,在代码执行上效率很高

#define START_TIME(_ST) _ST = ldw_time();

#definie END_TIME(_ET) _ET = ldw_time();


#defime WASTE_TIME(_ST,_ET) (_ET-_ST)



int main(int argc,char *argv[])

{

     long t1= 0;

     long t2 = 0;

     char buf[1*1024*1024];

     t1 = ldw_time();

      //START_TIME(t1);

     memset(buf,0,sizeof(buf));

     t2 = ldw_time();

     //END_TIME(t2);

     printf("memset time:%ul\n",t2-t1);

    // printf("memset time:%ul\n",WASTE_TIME(t1,t2));

     return 0;

}


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!