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

来源:互联网 发布:域名不备案会怎么样 编辑:程序博客网 时间:2024/06/14 09:40

一、方法一
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;//结果以秒为单位