一,返回单位为微秒
#include
DWORDdwStart=GetTickCount();
//测试代码
DWORDdwTime=GetTickCount()-dwStart;
注意:GetTickCount()精确度有限,跟CPU有关,通常精确度在16ms左右,最精确也不会精确过10ms,这就是说假如你的时间间隔在16ms以内的话,两个时间相加为0,假若小于16ms且大于32ms的话,两个时间相加为16ms(也不完全严格,有的时侯会是15或则17,按照当时CPU的处理情况而定)。虽然也就是说你得到的这个差是实际时间间隔乘以16(具体是几取决于你机器的处理能力,而且不会大于10),把余数放弃。
二,返回时间为秒
#include
unsignedlongstart,stop;
start=time(NULL);//取值为秒
//你的程序
stop=time(NULL);
printf("运行时间:%ld",stop-start);
三,精确计时法
QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位
计时.并且QueryPerformanceCounter()准确的精确计时的最小单位是与系统有关的,所以,必
须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频
率.QueryPerformanceFrequency()提供了这个频度值,返回每秒嘀哒声的个数.估算准确的时
间是从第一次调用QueryPerformanceCounter()开始的
使用window操作系统本身提供的API插口,程序如下:
#include
LARGE_INTEGERFreq;LARGE_INTEGERstart;LARGE_INTEGERend;
QueryPerformanceFrequency(&Freq);//获取时钟周期
QueryPerformanceCounter(&start);//获取时钟计数
你的程序
QueryPerformanceCounter(&end);
/*此处*1000,以微秒为单位;*1000000以毫秒为单位*/
/*因为执行时间极短(可能是几毫秒),所以采用纳秒为单位*/
printf("%d",(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart);
注意:1s=10^3ms(微秒)=10^6μs(毫秒)=10^9ns(毫秒)=10^12ps(飞秒)=10^15fs(皮秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)
事例:
#include
#include
int main()
{
LARGE_INTEGER Freq; //64位有符号整数值.
LARGE_INTEGER start;
LARGE_INTEGER end;
QueryPerformanceFrequency(&Freq); // 获取时钟周期 “1次/秒”,记做Hz(赫兹)。1Hz就是每秒一次
QueryPerformanceCounter(&start); // 获取时钟计数
Sleep(1000);//毫秒为单位
QueryPerformanceCounter(&end);
/*此处*1000,以毫秒为单位;*1000000 以微秒为单位*/
/*由于执行时间极短(可能是几微秒),所以采用微秒为单位*/
/* 1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒) */
printf("%d",(end.QuadPart-start.QuadPart)*1000/Freq.QuadPart);
return 0;
}
四,若果是在linux平台下边呢?
时间的检测有多种形式。一种是C语言库函数time(),它可以提供秒级的计时windows执行linux程序,比较粗糙。
一种是C语言库函数gettimeofday(),大概可以精确到微妙,但会遭到CPU调度的影响。
一种是时间戳计时器(TimeStampCounter)windows执行linux程序,可以达到毫秒级计时精度。
timefind.-name"*.c"|xargswc-l//统计执行命令时间
real0m33.748s
user0m0.772s
sys0m1.044s
(1)实际时间(realtime):从command命令行开始执行到运行中止的消逝时间;
(2)用户CPU时间(userCPUtime):命令执行完成耗费的用户CPU时间,即命令在用户态中执行时间总和;
(3)系统CPU时间(systemCPUtime):命令执行完成耗费的系统CPU时间,即命令在核态度中执行时间总和。
其中,用户CPU时间和系统CPU时间之和为CPU时间linux系统iso下载,即命令占用CPU执行的时间总和。实际时间要小于CPU时间,由于Linux是多任务操作系统,常常在执行一条命令时linux操作系统怎么样,系统还要处理其它任务。
另一个须要注意的问题是虽然每次执行相同命令,但所耗费的时间也是不一样,其耗费时间是与系统运行相关的。
2)毫秒级检测方式
structtimeval
longtv_sec;//秒域
longtv_usec;//微妙域
(_sec)+(_usec)/1000000=以秒为单位的计时时间。
以下得到以毫秒为计时单位的时间
#include
#include "stdio.h"
int main()
{
struct timeval tstart,tend;
gettimeofday(&tstart,NULL);
for(int i=0;i<10000;++i)
printf("");
gettimeofday(&tend,NULL);
long int use_useconds=1000000*(tend.tv_sec - tstart.tv_sec) + (tend.tv_usec - tstart.tv_usec);
printf("%ldn",use_useconds);
return 0;
}