时间处理函数小结

                时间处理函数小结

最近做蓝点的题目,要求算出每个算法的执行时间。

也就是用算法开始的时间减去算法结束的时间,可以调用时间函数。

我到网上一搜,发现处理时间的函数还真不少。

方法1

 

定义函数

void   ChangTick(int   ms)  

{  

  int   value=65535/55*ms;  

  unsigned   char   value_byte;  

  outport(0x43,0x36);  

  value_byte=value   &   0x00FF;  

  outportb(0x40,value_byte);  

  value_byte=value>>8;  

  outportb(0x40,value_byte);  

} 

 

主函数

void  main()  

{  

  clock_t   BeginTickCount,EndTickCount;         

  ChangTick(1);  

  BeginTickCount=clock();         /*开始时间*/

/*添加要处理的函数*/

  EndTickCount=clock();       /*结束时间*/

  printf("程序运行   %d   ",EndTickCount-BeginTickCount);  

  ChangTick(55);  

}

这个在TC 里面能运行,在VC下读不出函数outportboutport

 

方法2

利用函数  time,要头文件  <time.h>

  time   (&startTime);        //开始时间

/*添加要处理的函数*/

  time   (&endTime);

 

方法3

定义结构体

typedef union _ LARGE_INTEGER

{

   struct

   {

   DWORD LowPart;   //低位  32

   LONG HighPart;   //高位   32

   };

   LONGLONG QuadPart;    //64

} LARGE_INTEGER;

 

主函数:

void  main()  

{  

  LARGE_INTEGER litmp;

 LONGLONG qt1,qt2;

 double dft,dff,dfm;

  QueryPerformanceFrequency(&litmp);     //获得时钟频率

 dff=(double)litmp.QuadPart;

 QueryPerformanceCounter(&litmp);     //算法开始的时间

 qt1=litmp.QuadPart;

/*添加要处理的函数*/

 QueryPerformanceCounter(&litmp);   //算法结束的时间

 qt2=litmp.QuadPart;

 dfm=(double)(qt2-qt1);

 dft=dfm/dff;  

}

这个方法有点复杂,可以处理到毫秒,比较精确

我个人比较喜欢这种方法,但是这种在VC下调试不出来,不知道为什么。

 

方法4

#  include<time.h>

void  main( void )

{

long i = 10000000L;   //表示赋一个常整形值100000000i

clock_t start, finish;

double duration;

/* 测量一个事件持续的时间*/

printf( "Time to do %ld empty loops is ", i );

start = clock();

DataType   a[7]={6,10,3,5,1,9,2};

while( i-- )

/*添加要处理的函数*/

finish = clock();

duration = (double)(finish - start) /10000000;

printf( "%f seconds/n", duration );

//system("pause");

}

这种方法有点像方法1,但是用了个小技巧。一个算法执行的时间可能很短,让它执行1000000次时间就不短了。在用执行了1000000次的时间除以10000000,就可以得到执行一次的时间了。

小贴士:获得系统的时间用函数gettime();

 

就是这两天来的收获。还不小。

自我感觉良好。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值