c++ 准确计时_C++下四种常用的程序运行时间的计时方法总结

记录下当前时间start,调用程序fun(),再记录一下时间end。

前后时间一减(start-end)就得到程序的运行时间了。

首先介绍最常用的,但两种精度不是很高(>=10ms)的方法:clock()和GetTickCount()

一、clock()

C系统调用方法,所需头文件ctime/time.h,即windows和linux都可以使用。

1、clock()返回类型为clock_t类型

2、clock_t实际为long 类型, typedef long clock_t

3、clock() 函数,返回从 开启这个程序进程 到 程序中调用clock()函数 时之间的CPU时钟计时单元(clock tick)数(挂钟时间),返回单位是毫秒

4、可以用常量CLOCKS_PER_SEC, 这个常量表示每一秒(per second)有多少个时钟计时单元

#include    //引入头文件

int main()

{

clock_t start,end;   //定义clock_t变量

start = clock();    //开始时间

fun() //需计时的函数

end = clock(); //结束时间

cout<

}

二、GetTickCount()

GetTickCount()是一个Windows API,所需头文件为。

返回从操作系统启动到现在所经过的毫秒数(ms),精确度有限,跟CPU有关,一般精确度在16ms左右,最精确也不会精确过10ms。它的返回值是DWORD,当统计的毫妙数过大时,将会使结果归0,影响统计结果.

#include    //引入头文件

int main()

{

DWORD t1,t2;

t1 = GetTickCount();

fun() //需计时的函数

t2 = GetTickCount();

cout<

}

接下来是两种高精度的计时方法:gettimeofday() 和 QueryPerformanceCounter()

三、QueryPerformanceCounter()

QueryPerformanceCounter()是一个Windows API,所需头文件为

这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时.但是QueryPerformanceCounter() 确切的精确计时的最小单位是与系统有关的,

所以,必须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率. QueryPerformanceFrequency() 提供了这个频率值,返回每秒嘀哒声的个数.

#include    //引入头文件

int main()

{

LARGE_INTEGER t1,t2,tc;

QueryPerformanceFrequency(&tc);

QueryPerformanceCounter(&t1);

fun() //需计时的函数

QueryPerformanceCounter(&t2);

time=(double)(t2.QuadPart-t1.QuadPart)/(double)tc.QuadPart;

cout<

}

四、gettimeofday()

gettimeofday() linux环境下的计时函数,int gettimeofday ( struct timeval * tv , struct timezone * tz ),gettimeofday()会把目前的时间由tv所指的结构返回,当地时区的信息则放到tz所指的结构中.

//timeval结构定义为:

struct timeval{

long tv_sec; /*秒*/

long tv_usec; /*微秒*/

};

//timezone 结构定义为:

struct timezone{

int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/

int tz_dsttime; /*日光节约时间的状态*/

};

这个函数获取从1970年1月1日到现在经过的时间和时区(UTC时间),(按照linux的官方文档,时区已经不再使用,正常应该传NULL)。

调用代码:

#include    //引入头文件

int main()

{

struct timeval t1,t2;

double timeuse;

gettimeofday(&t1,NULL);

fun();

gettimeofday(&t2,NULL);

timeuse = (t2.tv_sec - t1.tv_sec) + (double)(t2.tv_usec - t1.tv_usec)/1000000.0;

cout<

}

还有一种C系统调用方法--time(),但是精度很低(秒级),不建议使用,这里就稍微带下用法。

time_t start,stop;

start = time(NULL);

fun();

stop = time(NULL);

附带三种计算Python的代码块或程序的运行时间的方法

方法一

import datetime

start = datetime.datetime.now()

run_function():

# do something

end = datetime.datetime.now()

print (end-start

方法二

import time

start = time.time()

run_function()

end = time.time()

print str(end)

方法三

import time

start = time.clock()

run_function()

end = time.clock()

print str(end-start)

其中,方法二的精度比较高。方法一基本上是性能最差的。这个其实是和系统有关系的。一般我们推荐使用方法二和方法三。我的系统是Ubuntu,也就是Linux系统,方法二返回的是UTC时间。 在很多系统中time.time()的精度都是非常低的,包括windows。

总概来讲,在 Unix 系统中,建议使用 time.time(),在 Windows 系统中,建议使用 time.clock()。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值