为了方便调试,自己编写了一个探测代码运行时间的类。
该类能够实现us级的精确延时,对于一般的算法应用(ms级别)足够了。
主要用到windows的API,以下是代码:
DetectTime.h
#pragma once
#include <Windows.h>
class DetectTime
{
public:
DetectTime(void);
~DetectTime(void);
private:
//定时参数
LARGE_INTEGER litmp;
LONGLONG Count0,Count1;
double dfMinus, dfFreq;
public:
double total_dt(void);
double dt(void);
};
DetectTime.cpp
#include "DetectTime.h"
DetectTime::DetectTime(void)
{
// 获得计数器的时钟频率
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;
// 获得初始时间点
QueryPerformanceCounter(&litmp);
Count0 = litmp.QuadPart;
}
DetectTime::~DetectTime(void)
{
}
// 计算当前时间点与初始时间点的时差
double DetectTime::total_dt()
{
//获得当前时间点
QueryPerformanceCounter(&litmp);
Count1 = litmp.QuadPart;
dfMinus = (double)(Count1-Count0);
return (dfMinus / dfFreq *1000); // 获得对应的时间值,单位为ms
}
// 计算当前时间点与上一个时间点的时差
double DetectTime::dt()
{
LONGLONG prev_Count;
prev_Count = Count1;
//获得当前时间点
QueryPerformanceCounter(&litmp);
Count1 = litmp.QuadPart;
dfMinus = (double)(Count1-prev_Count);
return (dfMinus / dfFreq *1000); // 获得对应的时间值,单位为ms
}
使用方法:
先在代码段首部定义一个DetectTime类,然后在需要检测运行时间的地方插入 DetectTime::dt() 方法,就可以计算该时间点跟上一个dt() 的时间间隔;DetectTime::total_dt() 用于检测从类建立到改时间点的总运行时间。返回的时间值的单位是ms
例子:
void main(void)
{
DetectTime probe;
//时间点0
cout<<"时间点0 "<<probe.dt()<<" ms."<<endl;
func1();
//时间点1
cout<<"时间点1与时间点0的间隔 "<<probe.dt()<<" ms."<<endl;
func2();
//时间点2
cout<<"时间点2与时间点1的间隔 "<<probe.dt()<<" ms."<<endl;
func3();
func4();
cout<<"总体运行时间 "<<probe.tatol_dt()<<" ms."<<endl;
}