有很多时候,实现一个功能后可能不仅仅要效果,还要效率,如果可以在极短的时间内完成一个功能那当然是最好不过的啦,但是可能经常会事与愿违。

这里就写一下,都可以怎样用C/C++或者Qt的方法来测试代码的运行时间。

一、C/C++方法

1.1 clock_t方法

clock_t方法需要包含头文件<time.h>,clock_t是一个长整型数字,它可以将时间精确到毫秒级别:

#include <time.h>

clock_t start, finish;
start = clock();
...
function();
...
finish = clock();
int duration = finish - start; double durationS = (double)duration / CLOCKS_PER_SEC;//如果需要换算成秒

1.2 使用windows API 1

头文件#include<Windows.h>,主要函数GetTickCount(),能达到毫秒级别:

#include <Windows.h> 

DWORD start_time = GetTickCount();
...
function();
...
DWORD end_time = GetTickCount();
DWORD duration = start_time - end_time;

1.3 使用Windows API 2

头文件依然是#include<Windows.h>,但是这次不一样,可以达到微秒级别:

#include <windows.h> 

double run_time;
_LARGE_INTEGER time_start; //开始时间
_LARGE_INTEGER time_over; //结束时间
double dqFreq; //计时器频率
LARGE_INTEGER f; //计时器频率 QueryPerformanceFrequency(&f);
dqFreq=(double)f.QuadPart;
QueryPerformanceCounter(&time_start); //计时开始 ...
function();
... QueryPerformanceCounter(&time_over); //计时结束 //乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒
run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;

也可以这么用的:

LARGE_INTEGER nFreq; LARGE_INTEGER t1;
LARGE_INTEGER t2; QueryPerformanceFrequency(&nFreq); QueryPerformanceCounter(&t1);
double dtStart = t1.QuadPart; ...
function();
... QueryPerformanceCounter(&t2); double dtEnd = t2.QuadPart; //后面的1000表示毫秒整数,微秒小数 double elapsed = (dtEnd - dtStart) / (double)nFreq.QuadPart * 1000;

二、Qt方法

Qt方法的话主要还是用到QTime类,Qt的方法基本上都只能精确到毫秒级别。

QTime startTime = QTime::currentTime();

...
function();
... QTime stopTime = QTime::currentTime();
int elapsed = startTime.msecsTo(stopTime);

要注意这个方法的是,如果你的代码块运行时间超级短,或者说是达到几个毫秒的级别的话,这个方法慎用,有毒,有时候直接就是0。

另一个也是Qt的QTime的方法,也是毫秒级别的,也是慎用:

QTime time;
time.start(); ...
function();
... int timeElapsed = time.elapsed();

三、结论

我个人的话,会相对比较推荐用clock_t的方法吧,这个好像是C/C++的东西,不算windows API的吧,一般来说冲突会相对比较少吧,如果对时间要求达到毫秒级别就满足的话,那如果是要达到微秒级别,那就没办法,暂时能找到的也就是1.3方法提到的window API 2的方法,但是这个因为直接用windows API,我竟然在某些场合下出现冲突的情况!!!

泪眼问花花不语,乱红飞过秋千去。

[C/C++]C/C++计算代码的运行时间的更多相关文章

  1. C语言--计算代码段运行时间

    c语言中有专一包含计算时间函数的头文件,time.h.当我们需要计算某段程序运行的时间时就需要用到time.h包含的clock()函数,在这里介绍一下如何使用这个函数计算代码运行时间. clock函数 ...

  2. Objective-C 计算代码运行时间

    今天看到一篇关于iOS应用性能优化的文章,其中提到计算代码的运行时间,觉得非常有用,值得收藏.不过在模拟器和真机上是有差异的,以此方法观察程序运行状态,提高效率. 第一种:(最简单的NSDate) N ...

  3. 使用console进行 性能测试 和 计算代码运行时间(转载)

    本文转载自: 使用console进行 性能测试 和 计算代码运行时间

  4. 使用console进行 性能测试 和 计算代码运行时间

    原文:http://www.tuicool.com/articles/JrARVjv 对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用 debugger 会显得过于笨重,最常 ...

  5. 使用console进行性能测试和计算代码运行时间

    对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试.最常用的语句就是console.log(expre ...

  6. 三种计算c#程序运行时间的方法

    三种计算c#程序运行时间的方法 第一种: 利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = S ...

  7. C:clock() 计算代码执行时间

    clock():捕捉从程序开始运行到clock()被调用时所耗费的事件. 这个时间的单位是 clock tick,即时钟打点 常数 CLK_TCK:机器时钟每秒走的时钟打点数 要使用这个函数需要包含头 ...

  8. iOS测试一段代码的运行时间

    王刚韧 23:19:26测试一段代码的运行时间 测试一段代码运行花了多久: NSDate* tmpStartData = [NSDate date] ;<#代码#> double delt ...

  9. python基础:测量python代码的运行时间

    Python社区有句俗语:“python自己带着电池” ,别自己写计时框架.Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间. timeit模块 ti ...

随机推荐

  1. linux下anaconda的安装和使用

    1.将python3设置为默认 直接执行这两个命令即可: sudo update-alternatives --install /usr/bin/python python /usr/bin/pyth ...

  2. <老古董>线性支持向量机中的硬间隔(hard margin)和软间隔(soft margin)是什么

    _________________________________________________________________________________________________ Th ...

  3. 用 Python 分析网易严选 Bra 销售信息,告诉你她们真实的 Size

    今天通过爬虫数据进行分析,一起来看看网易严选商品评论的获取和分析. 声明:这是一篇超级严肃的技术文章,请本着学习交流的态度阅读,谢谢! !   ​ 网易商品评论爬取 分析网页 评论分析 进入到网易严选 ...

  4. django ModelForm在模板中显示中文

    情景再现 修改ModelForm 效果

  5. oracle获取排序第一的数据

    一:按照某字段排序(时间,总数等),获取第一条 select a.* FROM ( select * from ( select t.*,row_number() over(partition by ...

  6. 面向对象-static关键字实战案例

    面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...

  7. 苹果maccms网站漏洞进行修复解决方法教程

    上期发现视频名称中包含木马文件 然后教大家使用标签进行过滤 {$vo.vod_name|mac_filter_html} 可是最近发现现在黑客行为是全字段挂马,修改数据字段格式挂马,多重嵌套挂马. 真 ...

  8. 用Python分析淘宝2000款避孕套,得出这些有趣的结论

    数据分析之前我们需要清楚的知道自己想要分析什么东西,也就是先搞清楚我们的目标.在公司可能是公司财报.用户增量变化.产品受欢迎程度.一些报表等等. 那我们今天的目标有哪些呢?我们来看看: ! 分析避孕套 ...

  9. git提交时设置忽略部分文件提交

    git当前提交项目时总是会提交很多东西把Debug文件也提交了 在项目根目录(例如我的项目文件夹下,.sln文件的上一级目录)下建一个.gitignore文件,文件内容直接可粘贴下面的,这样 pack ...

  10. c# 循环界面控件

    在 Winform 开发中,窗体(Form)就像一个大容器,可以装各种各样的控件,包括 Panel控件.如果窗体是 Winform 中的最大的容器,那么 Panel控件可以算是老二,它专门用于软件界面 ...