C++简单的函数计时方法
2008-07-17 14:21
288 查看
这里提供一个简单的函数计时方法,利用QueryPerformanceFrequency和QueryPerformanceCount函数进行精确计时,这是最精确的计时方法。
原理是在函数被调用时记录时间,结束时利用局部对象的析构函数再记录一次时间,将这个时间差累积到对应的函数的统计数据中。当程序退出时,全局对象释放,将所有函数的数据输出到调试窗口。使用时,需要再函数开头位置插入一条宏:_PF。需要计时的函数内都插入一条这样的宏。为了方便,宏被定义的比较短。
FunctionName ActiveTime Average Clled
WinMain 5.480105 5.480105 1
MsgProc 0.975687 0.015245 64
InitD3D 0.222094 0.222094 1
InitGeometry 0.004631 0.004631 1
Render 4.876714 0.021771 224
SetupMatrices 0.001405 0.000006 224
Cleanup 0.209167 0.209167 1
#define PERFDATA_INIT_SIZE 32
#define PERFDATA_INC_SIZE 32
class PerformanceDaemon
PerformanceDaemon Perf;
class PerformanceWatcher
#ifdef _DEBUG
#define _PF \
static DWORD __PerfCounter=0xFFFF;\
PerformanceWatcher __PerfWatcher(__FUNCTION__,__PerfCounter);
#else
#define _PF
#endif
VOID Cleanup()
// File: callcaphooks.c
#include <stdio.h>
int main();
void _CAP_Enter_Function(void *p)
void _CAP_Exit_Function(void *p)
if (p != main)
printf("Leaving function (at address %p) at %d\n",
p, GetTickCount());
return;
}
原理是在函数被调用时记录时间,结束时利用局部对象的析构函数再记录一次时间,将这个时间差累积到对应的函数的统计数据中。当程序退出时,全局对象释放,将所有函数的数据输出到调试窗口。使用时,需要再函数开头位置插入一条宏:_PF。需要计时的函数内都插入一条这样的宏。为了方便,宏被定义的比较短。
FunctionName ActiveTime Average Clled
WinMain 5.480105 5.480105 1
MsgProc 0.975687 0.015245 64
InitD3D 0.222094 0.222094 1
InitGeometry 0.004631 0.004631 1
Render 4.876714 0.021771 224
SetupMatrices 0.001405 0.000006 224
Cleanup 0.209167 0.209167 1
#define PERFDATA_INIT_SIZE 32
#define PERFDATA_INC_SIZE 32
class PerformanceDaemon
PerformanceDaemon Perf;
class PerformanceWatcher
#ifdef _DEBUG
#define _PF \
static DWORD __PerfCounter=0xFFFF;\
PerformanceWatcher __PerfWatcher(__FUNCTION__,__PerfCounter);
#else
#define _PF
#endif
VOID Cleanup()
// File: callcaphooks.c
#include <stdio.h>
int main();
void _CAP_Enter_Function(void *p)
void _CAP_Exit_Function(void *p)
if (p != main)
printf("Leaving function (at address %p) at %d\n",
p, GetTickCount());
return;
}
相关文章推荐
- C++中的虚函数、虚函数的作用和使用方法
- C++的STL中vector内存分配方法的简单探索
- C# 中奇妙的函数 -- 3. 联接序列的五种简单方法
- 减少C++代码编译时间的简单方法(必看篇)
- 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)
- C++中open() 函数不能传string的解决方法
- C# 中奇妙的函数--联接序列的五种简单方法
- [C/C++基础] C语言常用函数strlen的使用方法
- 关于C++中定义比较函数的三种方法小结
- 用C++实现七种排序算法,可选择排序方法,简单易懂。
- jni java类中本地方法 对应 C/C++中的函数命名规范
- C++取成员函数地址方法
- C/C++时间函数使用方法
- C++中sting类的简单实现方法
- 简单把webdriver的find_element方法写成函数
- golang 记录函数执行耗时的一个简单方法。
- C++ 获取类成员函数地址方法 浅析
- C++中类成员函数作为回调函数的几种方法
- C/C++中的计时函数
- [C/C++]Windows中配置g++编译环境最简单方法