Windows 各种计时函数总结

总结一下C/C++程序中几种常用的计时函数 在编写程序时,有时需要准确测量一个算法的运行时间,以做到对某一特定的数据集,不同算法耗时的比较。 题主今天在编写算法课实验代码的时候,大致在网上搜索了下C/C++中几种常用的计时函数,在此做一个总结,希望对大家学习C/C++以及算法有所帮助。 // Windows系统下可以用 time(),clock(),timeGetTime(),GetTickCount(), // QueryPer 阅读详情
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerformanceCounter()来完成。文章最后给出了5种计时方法示例代码。

 

标准C/C++的二个计时函数time()及clock()

 

time_t time(time_t *timer);

返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。

time_t实际是个long长整型typedef long time_t;

头文件:#include <time.h>

 

clock_t clock(void);

返回进程启动到调用函数时所经过的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock),以毫秒为单位。

clock_t实际是个long长整型typedef long clock_t;

头文件:#include <time.h>

 

 

Windows系统API函数

timeGetTime()、GetTickCount()及QueryPerformanceCounter()

 

DWORD timeGetTime(VOID);

返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。

头文件:#include <Mmsystem.h>            

引用库:#pragma comment(lib, "Winmm.lib")  

 

DWORD WINAPI GetTickCount(void);

这个函数和timeGetTime()一样也是返回系统时间,以毫秒为单位。

头文件:直接使用#include <windows.h>就可以了。

 

高精度计时,以微秒为单位(1毫秒=1000微秒)。

先看二个函数的定义

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);

得到高精度计时器的值(如果存在这样的计时器)。

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

返回硬件支持的高精度计数器的频率(次每秒),返回0表示失败。

再看看LARGE_INTEGER

它其实是一个联合体,可以得到__int64 QuadPart;也可以分别得到低32位DWORD LowPart和高32位的值LONG HighPart。

在使用时,先使用QueryPerformanceFrequency()得到计数器的频率,再计算二次调用QueryPerformanceCounter()所得的计时器值之差,用差去除以频率就得到精确的计时了。

头文件:直接使用#include <windows.h>就可以了。

 

 

下面给出示例代码,可以在你电脑上测试下。

[cpp]  view plain copy
  1. //Windows系统下time(),clock(),timeGetTime(),GetTickCount(),QueryPerformanceCounter()来计时 by MoreWindows  
  2. #include <stdio.h>  
  3. #include <windows.h>  
  4. #include <time.h> //time_t time()  clock_t clock()  
  5. #include <Mmsystem.h>             //timeGetTime()  
  6. #pragma comment(lib, "Winmm.lib")   //timeGetTime()  
  7.   
  8. int main()  
  9. {  
  10.     //用time()来计时  秒  
  11.     time_t timeBegin, timeEnd;  
  12.     timeBegin = time(NULL);  
  13.     Sleep(1000);  
  14.     timeEnd = time(NULL);  
  15.     printf("%d\n", timeEnd - timeBegin);  
  16.       
  17.       
  18.     //用clock()来计时  毫秒  
  19.     clock_t  clockBegin, clockEnd;  
  20.     clockBegin = clock();  
  21.     Sleep(800);  
  22.     clockEnd = clock();  
  23.     printf("%d\n", clockEnd - clockBegin);  
  24.       
  25.       
  26.     //用timeGetTime()来计时  毫秒  
  27.     DWORD  dwBegin, dwEnd;  
  28.     dwBegin = timeGetTime();  
  29.     Sleep(800);  
  30.     dwEnd = timeGetTime();  
  31.     printf("%d\n", dwEnd - dwBegin);  
  32.       
  33.       
  34.     //用GetTickCount()来计时  毫秒  
  35.     DWORD  dwGTCBegin, dwGTCEnd;  
  36.     dwGTCBegin = GetTickCount();  
  37.     Sleep(800);  
  38.     dwGTCEnd = GetTickCount();  
  39.     printf("%d\n", dwGTCEnd - dwGTCBegin);  
  40.       
  41.       
  42.     //用QueryPerformanceCounter()来计时  微秒  
  43.     LARGE_INTEGER  large_interger;  
  44.     double dff;  
  45.     __int64  c1, c2;  
  46.     QueryPerformanceFrequency(&large_interger);  
  47.     dff = large_interger.QuadPart;  
  48.     QueryPerformanceCounter(&large_interger);  
  49.     c1 = large_interger.QuadPart;  
  50.     Sleep(800);  
  51.     QueryPerformanceCounter(&large_interger);  
  52.     c2 = large_interger.QuadPart;  
  53.     printf("本机高精度计时器频率%lf\n", dff);  
  54.     printf("第一次计时器值%I64d 第二次计时器值%I64d 计时器差%I64d\n", c1, c2, c2 - c1);  
  55.     printf("计时%lf毫秒\n", (c2 - c1) * 1000 / dff);  
  56.       
  57.     printf("By MoreWindows\n");  
  58.     return 0;  
  59. }  


下面是本人电脑上的测试结果:

 

 

 

转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6854764

C++执行程序计时函数详解 通常计时函数主要有两个,分别是getTickCount()和getTickFrequency(). 阅读详情

相关推荐

离散小波-DWT

前沿:      小波变换比较复杂,而且内容

tianchang2you的专栏 4647

C++中time()、timeGetTime()函数,以及创建Log日志写入日志教程

c++中time()、timeGeTime()函数

qq_42181775的博客 1262

LabVIEW波形图表时间轴设置:三种方法实现横坐标显示日期时间

在数据采集与设备监控场景中,波形图表的横坐标默认显示采样点序号而非日期时间,这给工程师分析历史数据带来不便。理解时间标识(Timestamp)的本质——一个自1904年起算的双精度秒数,是解决问题的关键。时间轴设置既是显示格式问题,更是数据层与显示层的协同设计。通过属性节点动态生成刻度标签、将时间标识数组直接作为X轴数据、或使用波形数据(Waveform)类型绑定t0与dt,分别适用于固定点数显示、非等间隔事件记录和等间隔连续采样等不同需求。合理选择方案并注意缓冲区预分配与时间连续性处理,可让波形图表准确呈

weixin_33416697的博客 253

timeGetTime

timeGetTime获取系统时间,毫秒。系统时间是系统启动以后消逝的时间。 timeGetSystemTime和timeGetTime唯一的不同是返回值,timeGetSystemTime使用MMTIME结构,开销稍大。 timeGetTime的精度取决于机器,大概五毫秒或更多,可以使用timeBeginPeriod和timeEndPeriod函数增加精度。 GetTickCo

yuan_hs_hf的专栏 1610

使用IntelliJ IDEA配置版本管理(SVN和Git)

在开发过程中,版本管理是必不可少的一部分,它可以帮助团队协作、管理代码历史记录,并且提供了代码回滚和分支管理等功能。本文将介绍如何使用IntelliJ IDEA配置版本管理,包括SVN和Git两种方式,另外列举了常见的问题并指导修复,以帮助开发者更高效地进行代码管理和协作。

2868

Antlr4入门(二)基本概念解析

在上一章中(Antlr4入门(一)IDEA中Antlr的安装与使用),我们安装了Antlr,并编写运行了第一个程序“Hello world”。而在本章中,我们将学习语言类应用程序相关的重要过程、术语和数据结构。 一. 术语 语言(language)是由一系列有意义的语句组成,语句(sentence)由词组组成,词组(phrase)是由更小的子词组(subphrase)和词汇符号(vocabulary symbols)组成。 举个例子,英语就是一种语言,“Keep on going never gi.

qq_37771475的博客 5207

windows各种计时函数总结

本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf

暮风 882

浅显易懂地看LLC变换器(三)

第3期 谐振与增益的定性关系 由简单的谐振电路说起 我们将以电感和电容的基本电路的特性逐渐了解谐振电路的特性 与电阻不同,电感和电容都不是纯阻性线性器件,电感的感抗XL和电容的容抗Xc都与频率有关,当加在电感和电容上的频率发生变化时,它们的感抗XL和容抗Xc会发生变化。 1) 如下图RL电路,当输入源Vin的频率增加时,电感的感抗增大,输出电压减小,增益Gain=Vo/Vin随频率增加而减小。 2) 如下图RC电路,相反,当输入源Vin的频率增加时...

iFTrue电力电子专栏 6735

Windows计时器函数

文章目录1、标准c/c++函数(windows/Linux)2、windows系统提供的API接口 1、标准c/c++函数(windows/Linux) 1、clock()函数,毫秒精度 #include <time.h> clock_t time_begin= clock(); Sleep(1000); clock_t time_end = clock(); std::cout &...

Joker_N的博客 1311

量化爬虫第一步:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向实战)

本文详细介绍了如何通过JS逆向技术破解同花顺问财数据接口的核心加密参数hexin-v,构建稳定可靠的量化数据采集方案。从抓包分析到Cookie Hook技术应用,再到环境补全与参数生成实现,手把手教你完成量化爬虫的第一步。文章还提供了实战注意事项与优化建议,帮助开发者规避常见问题。

weixin_42620202的博客 301

cadence数模混合仿真反标sdf

数模混合IC设计时经常要调用一些Verilog模块(最简单的例如SPI接口),在前仿时一般直接用rtl代码来仿真,但是后仿时要关注因寄生带来的延迟,避免这些额外的延迟导致时序错误,因此不能简单地采用RTL来仿真。 一般有两种办法:1是采用由RTL综合得到的门级电路来仿真,这种方法比较简单,但是缺点是规模较大,而且只包括门延迟不包括因版图导致的线延迟;如果想要仿真更精细,就要对该这部分门电路提取寄生参数; 另一种方式是利用sdf文件(standard delay format)来进行仿真。后端工具在布局布

长河柱天的博客 7273

Windows与Linux下系统计时函数整理总结

通用的C/C++计时函数 time_t time(time_t *timer); 返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。 time_t实际是个long长整型typedef long time_t。 头文件:#include&lt;time.h&gt; 精度:1s   clock_t clock(void); 返回从“开...

wujiahao2016的博客 968

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+
上一篇: 白话经典算法系列之五 归并排序的实现
下一篇: 堆排序算法
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值