[收集]计算程序的运行时间

34 篇文章 0 订阅

一、方法一
C++的库函数中,已经给我们提供了这样的方法——clock(),我们可以使用它来计算程序的运行时间,闲话少说了,开门见山:

 计算程序运行时间使用的知识点:

 1clock_t

 2clock()

 3CLOCKS_PER_SEC

 

 这些库函数、类型和常量都是定义在ctime库中的。下面就解释一下吧!

 

 1clock_t数据类型,其实,当你打开time.h就知道了,就是个long型,用来记录一段时间内的clocks数,即CPU的运行单元时间。

 

 2clock()函数,返回类型clock_t,函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock),(返回的是毫秒,ms);若挂钟时间不可取,则返回-1。

 3CLOCK_PER_SRC

 

 我们若想计算程序的运行时间,则只要根据程序的入口点和出口点出都计算clocks,再算差就可以了,都是在main()中进行操作,如下:

    
#include <iostream>
#include <time.h>    //添加此头文件
using namespace std;
    
 int main() 
 {
    
  clock_t start, end;
  
  start = clock();
  
  //省略
  
  end = clock();
  
  cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<"S"<<endl;
  return 0;
}


二、方法二

使用函数GetTickCount#include <windows.h>),它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是2-1 ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。


在程序前面加上

DWORD take;

take = GetTickCount();

在程序结束处加上

printf("\n%ld\n", GetTickCount() - take);

示例:

#include <iostream>
#include <windows.h>   //添加此头文件
using namespace std;
int main() 
{
DWORD take = GetTickCount();   
//在此处添加代码 
printf("\n%ld\n", GetTickCount() - take);
return 0;
}


三、方法三

精确获取时间(QueryPerformanceCounter),函数QueryPerformanceCounter用于得到高精度计时器的值()

//这是LARGE_INTEGER结构的定义,不需要定义
typedef union _LARCE_INTEGER
{
    struct 
    {
        DWORD LowPart;// 4字节整型数 
        LONG HighPart;// 4字节整型数 
    };
    LONGLONG QuadPart;//8字节整型数 
}LARGE_INTEGER;

//实际程序

LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;//记录程序开始和结束的时间

double dfMinus, dfFreq, dfTim;//

QueryPerformanceFrequency(&litmp);//获得计数器的时钟频率

 

dfFreq=(double)litmp.QuadPart;

QueryPerformanceCounter(&litmp);

//获得初始值

QPart1=litmp.QuadPart;

/*

要测试的程序

*/

QueryPerformanceCounter(&litmp);

//获得中止值

QPart2=litmp.QuadPart;

dfMinus=(double)(QPart2-QPart1);

//获得对应的时间值

dfTim=dfMinus/dfFreq;

cout<<dfTim<<endl;//结果以秒为单位

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值