跨平台的模块时间统计套件(C++编写)

在编写时间密集型程序时,我们经常需要统计某些模块(或函数)的时间消耗。在以往实践中,这往往需要添加大量的测试代码,费时费力。正好我目前在公司开发的各类行情FeedHandler恰好也是时间密集型程序,也常常需要测试模块的时间消耗,因此我开发了一个小套件,极大简化了程序各模块的时间统计。

套件开源,可至http://download.csdn.net/detail/great3779/4139994免费下载使用。

首先通过Demo看看套件运行的效果:

Demo代码如下:

#include "stdafx.h"
#include <Windows.h>	// just include for testing demo.
#include "TimerKitWrapper.h"
#include <sstream>
using namespace std;

void test(int i)
{
	stringstream ss;
	//ss << __FUNCTION__ << "_" << i;
	ss << "test" << "_" << i;
	TUnit tu(ss.str());
	RegisterUnit(tu);

	Sleep(100);
}

int _tmain(int argc, _TCHAR* argv[])
{
	// 主线程中定义一个TKit对象即可
	TKit tk;

	TUnit tu("_tmain");
	RegisterUnit(tu);

	{
		// 模块中定义一个测时单件并注册
		// function为待测时模块名,windows下可用__FUNCTION__获取函数名
		TUnit tu("function");	
		// 注册至测时套件
		RegisterUnit(tu);

		Sleep(400);
	}

	for(int i = 0; i < 3; ++i)
	{
		test(i);
	}

	return 0;
}

Demo运行效果如下:



从Demo程序可以看出,测时套件的使用非常简单:仅需在主线程中定义一个TKit对象,然后在需要统计时间的模块内注册TUnit测时单件即可。

待程序运行结束后,会在最后输出各模块的统计时间。使用方便,显示明快!


几点说明:

1. 计时精度精确到毫秒级(多数情况下够用了)。

2. 示例套件仅采用了控制台的结果输出方式,感兴趣的朋友可以扩展为其他输出方式(例如文件, xml等)

3. 套件线程安全。不过如果在多线程中同时注册名称完全相同的测试单件,则套件运行结果未定义(但不会崩溃)。

当然,也可以对CTimerKit::AddTime加互斥保护消除未定义的结果,有兴趣的朋友可以试试。

4. 添加了两个外壳类CTimerKitWrapper和CTimerUnitWrapper是为了隐藏代码的实现细节,以便将套件封装成dll形式。

有兴趣的朋友可以将其封装成dll(这还是比较简单的)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值