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

在用多线程练习程序的时候, 需要测试性能,获取程序的运行时间。
一开始使用的是:
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 );
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

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

函数原型

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

这个函数会把时间包装为一个结构体返回。包括秒,微妙,时区等信息.
具体如下:

struct  timeval{
       long  tv_sec;/*秒*/
       long  tv_usec;/*微妙*/
};
struct  timezone{
        int tz_minuteswest;/*和greenwich时间差*/
        int tz_dsttime; 
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

程序实例

#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);
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值