C/C++获取时间方法:gettimeofday() 您所在的位置:网站首页 计算时间间隔c语言代码是什么 C/C++获取时间方法:gettimeofday()

C/C++获取时间方法:gettimeofday()

2024-07-13 06:20| 来源: 网络整理| 查看: 265

在用多线程练习程序的时候, 需要测试性能,获取程序的运行时间。 一开始使用的是: clock_t 类,而且这个用法还很简单如下

int i = 100000000; clock_t start,finish; //定义开始,结束变量 start = clock();//初始化 while( i-- ); finish = clock();//初始化结束时间 double duration = (double)(finish - start) / CLOCKS_PER_SEC;//转换浮点型 printf( "%lf seconds\n", duration );

这样就可以了,乍一看很合理呀, 程序开始获取,程序结束了获取时间, 但是运行多线程程序的时候,时间并没有减少,甚至还有所增加。 后来查了资料:

发现clock()是程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。

我们都知道,多线程程序是把任务分到多个线程上,并行计算。而clock()函数计算的是所有的cpu的时间,这样跟单线程的就没有区别了,因此用这个函数不太理想。 后来可以直接获取两次系统时间来得到运行时间; 这里就使用了 gettimeofday()方法来得到。下面对其做一个简单介绍

函数原型 #include 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; } 程序实例 #include #include #include int main() { float time_use=0; struct timeval start; struct timeval end; gettimeofday(&start,NULL); //gettimeofday(&start,&tz);结果一样 printf("start.tv_sec:%d\n",start.tv_sec); printf("start.tv_usec:%d\n",start.tv_usec); int i = 100000000; while(i--); gettimeofday(&end,NULL); printf("end.tv_sec:%d\n",end.tv_sec); printf("end.tv_usec:%d\n",end.tv_usec); time_use=(end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec);//微秒 printf("time_use is %.10f\n",time_use); }

通过这个函数即可 准确获取多线程序运行时间。 或者直接写个shell脚本执行时间也可以



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有