VC++追踪代码运行时间

为了方便调试,自己编写了一个探测代码运行时间的类。

该类能够实现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; 
}




你可能感兴趣的:(C++)