
C/C++中的计时函数是clock()。
所以,可以用clock函数来计算的运行一个循环、程序或者处理其它事件到底花了多少时间,具体参考代码如下:
#include “stdio.h”#include “stdlib.h”
#include “time.h”
int main( void )
{
long i = 10000000L
clock_t start, finish
double duration
/* 测量一个事件持续的时间*/
printf( "Time to do %ld empty loops is ", i )
start = clock()
while( i-- )
finish = clock()
duration = (double)(finish - start) / CLOCKS_PER_SEC
printf( "%f seconds\n", duration )
system("pause")
}
获取程序运行时间:在<time.h>里有函数clock()本身这个函数取得的时间好像是ms,要取得s就
写成clock()/CLOCKS_PER_SEC但CLOCKS_PER_SEC是在time.h里定义的,如果没这个定义
那只能用clock()取得ms这个函数的执行不会中途停止,如果是在windows系统下,因为它是
多任务系统,它需要在各任务之间切换,如果在测试过程中,执行其他程序,所其得的时间,就会
出现差别,还有windows运行速度相当快,对于小型的测试,所得的时间几乎为0,因此最好将
要测试的过程执行100次或以上,然后再将取得的时间执行次数输出非常耗时间,没什么必要
的话,就不要输出
这是一个测试选择排序的程序
#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
#define
M
1000
/*
执行次数
*/
#define
N
500
/*
数组大小
*/
void
SelectSort(int
*a,int
l,int
r)
{
int
i,j,v
for
(i=0i<ri++)
{
for
(j=i+1j<=rj++)
{
if
(*(a+i)>*(a+j))
v=*(a+i),*(a+i)=*(a+j),*(a+j)=v
}
}
}
void
main()
{
int
a[N],i,j
double
start,finish
/*
开始时间,结束时间
*/
start=(double)clock()
/*
我的time.h内没有CLOCKS_PER_SEC
*/
for
(j=0j<Mj++)
{
/*
执行M次
*/
for
(i=0i<N*(a+i++)=rand()%10)
/*
每次重新赋值
*/
SelectSort(a,0,N-1)
}
finish=(double)clock()
printf("%.4fms",(finish-start)/M)
getchar()
}
在程序开始时调用一次time()结束时调用一次time(),两次相减就能获得秒数。例:
#include
<time.h>
#include
<stdio.h>
int
main()
{
int
iStartTime
=
time(NULL)
int
i
=
1
int
iEndTime
while
(i
>
0)//这里应该放你要运行的程序
{
i++
}
iEndTime
=
time(NULL)
printf("%ds
elapsed.\n",iEndTime-iStartTime)
return
0
}
但这个方法精度很低,只能精确到秒。要更高的精确度需要调用 *** 作系统的API。如在Windows下,精确到毫秒级:
#include
<windows.h>
#include
<stdio.h>
int
main()
{
unsigned
uStartTime
=
GetTickCount()//该函数只有在Win2000及以上的版本才被支持
int
i
=
1
unsigned
uEndTime
while
(i
>
0)
{
i++
}
uEndTime
=
GetTickCount()
printf("%ums
elapsed.\n",uEndTime-uStartTime)
return
0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)