有时候,在开发的过程中,想要测试一下某个函数的执行时间是多久,这时候,就会用到定时器。
这里就有个小技巧,通过类的构造函数以及析构函数,配合一个计时器,来计算一个函数的执行时间。原理就是先声明一个类,在构造函数中记录当前时间点,然后在析构函数中再记录一下当前时间点,并减去构造函数中记录的起始时间点,这样,只要在需要被测试的函数开头实现一个类对象就可以了。具体的C++代码如下:
//函数执行时长的性能分析
#include "string"
#include <ace/OS.h>
#include <ace/Reactor.h>
Class CpuTimeState
{
public:
CpuTimeState(char *func_name)
{
begin_sec = ACE_OS::gettimeofday().sec();
begin_usec = ACE_OS::gettimeofday().usec();
func_name_ = func_name;
}
~CpuTimeState()
{
int now_sec = ACE_OS::gettimeofday().sec();
int diff_sec = now_sec - begin_sec;
long long now_usec = ACE_OS::gettimeofday().usec();
long long diff_usec = diff_sec * 100000 + (now_usec - begin_usec);
//下面这行是我们项目中封装的一个打印接口,其实就类似snprintf
ACE_DEBUG((LM_ERROR, "CpuTimeStat end %s usec=%Q,\n", func_name_.c_str(), diff_usec));
}
private:
int begin_sec;
int begin_usec;
std::string func_name_;
};
上面就是简单的一个类声明,只需要在被测试函数里面第一行实现一个类对象,那么当这个被测试的函数结束之前,就会先调用我们实现的类的析构函数,随后就可以查看打印,观察时间。
//例如
int TestClass::TestFunction()
{
//假设这个是需要测试的函数,那么在下面加上实现就可以了
CpuTimeState test_time_log("TestFunction");
...
return 0;
}