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