C/C++获取时间方法:gettimeofday()
来源:互联网 发布:淘宝app限时抢购在那 编辑:程序博客网 时间:2024/04/30 05:54
在用多线程练习程序的时候, 需要测试性能,获取程序的运行时间。
一开始使用的是: 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<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; }
程序实例
#include <stdio.h>#include <sys/time.h>#include <stdlib.h>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脚本执行时间也可以
0 0
- C/C++获取时间方法:gettimeofday()
- C语言gettimeofday()函数:获取当前时间
- c函数之gettimeofday()函数获取系统时间
- linux C 高精度时间函数:gettimeofday()
- C语言获取微秒级的系统时间 gettimeofday timeval timeout
- C语言:获取程序运行消耗的时间——gettimeofday
- (笔记)linux c获取当前时间的函数gettimeofday(毫秒微秒)
- gettimeofday() -- 获取当前时间
- gettimeofday() -- 获取当前时间
- C语言的时间函数(1)gettimeofday,timeval,timezone
- C语言函数gettimeofday
- linux中C语言获取高精度时钟gettimeofday函数
- linux c 获取系统时间的方法
- Objective C 获取当前日期时间方法
- C/C++ 获取时间间隔的方法
- objective-c中获取时间的方法
- C/C++获取时间的方法
- C语言获取系统时间的方法
- Map遍历
- 开发板自带FTP设置方法
- zoj 3326 An Awful Problem 日期
- [BZOJ1503]NOI2004 郁闷的出纳员|splay
- kvm 中断以及io虚拟化 cpu_enter_guest->inject_pending_event
- C/C++获取时间方法:gettimeofday()
- spin_lock与spin_lock_irqsaveq区别
- 省选归来
- 帧锁定算法解决游戏同步
- [Android实例] DownloadManager的使用
- Io与中断
- poj 1003
- Android学习之监听按钮点击事件
- java开发环境搭建