
FTL(Fishjam Template Library)
文章平均质量分 93
fishjam
这个作者很懒,什么都没留下…
展开
-
用于删除map中new出来的Key/Value 的PairDeleter
<br /> 一般对于 vector/list/set 等中 new出来的数据,在最后都会用 for_each(begin(),end(), ObjectDelete()) 一类的写法进行删除,但对于map中new出来的数据,则没有比较方便的删除方法。写一个类似的 PairDeleter<br /> <br /> //使用 for_each 删除容器中保存的对象指针的类(结构) -- 参见 Effective STL 中的条款7 template <typename T> str原创 2011-01-08 19:01:00 · 1435 阅读 · 0 评论 -
Windows下一个比较完美的线程池实现(更新)
1. 前言线程池不是一个新鲜的东西,网上能找到很多原理、实现,甚至很多库都提供了实现,比如微软的 ATL::CThreadPool, Vista后提供的CreateThreadpoolWork, boost 中提供的 thread_pool, 优快云、CodeProject 等网站上很多人已经实现的类。但这些库往往只支持启动任务,而不能很好地停止任务(相信很多人都会和我一样有这个需求),于原创 2013-03-03 23:45:07 · 24565 阅读 · 28 评论 -
在Exe和Dll之间共享变量
今天解决了我开发的FTL里面一个困扰我很久的Bug,把方法共享一下。首先说明:这不是用 pragma_data 设置的在多个 Exe 公用同一个DLL时,使用DLL中相同的变量,而是同一个进程的EXE和各个DLL之间共享变量。背景介绍: FTL是本人参考ATL、WTL等开发的一个模版库,其中是我常用到的各种可重用的功能代码(比如日志、线程、线程池、流水线等)。因为全部都是头原创 2013-03-07 21:18:36 · 5254 阅读 · 0 评论 -
软件流水线--多核时代的高性能编程
1. 前言流水线技术是把一件任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构负责执行,而这些机构可以并行工作。在任一时刻,任一任务只占用其中一个执行机构,这样就可以实现多个任务的重叠执行,以提高工作效率。自从福特汽车在工业生产中引入了流水线后,流水线这一方式就广泛应用于各种生产环节中,大大提高了生产效率。对于IT人士来说,大家都知道Intel和AMD也在CPU中引入了流水线的原创 2012-04-05 22:47:50 · 9323 阅读 · 4 评论 -
COM接口中的信息获取
大家都知道,作为客户端使用COM服务时,需要通过 QueryInterface 获取到组件支持的COM接口,然后再调用其提供的各种方法来完成功能。但各种COM服务都支持哪些接口呢?这个信息一般比较难直接获取到,通常是到处查找资料,参看人家的例子,然后自己再不停的做试验,效率非常低。在开发Visual Studio的插件过程中,也需要通过 IServiceProvider::QueryServi原创 2012-03-17 23:27:25 · 2945 阅读 · 0 评论 -
FTL(Fishjam Template Library)简介
相信各位程序员在软件开发的过程中,为了方便学习和开发,大多都设计、实现或使用过各种Utility库。我也曾经将常用的代码开发成Dll形式的库,但后来发现维护起来实在太困难。主要的问题是使用时需要区分各种版本(Debug/Release, Unicode/ANSI,不同的Visual Studio版本,甚至其中使用的 CString 都区分 MFC/ATL/WTL 的等),在没有CI的情况下,个人维原创 2012-02-22 19:58:20 · 1781 阅读 · 2 评论 -
兼容DC和兼容位图
昨天在论坛上看到有人因为绘图出现错误而求助,感觉其中对于兼容DC和兼容位图的问题,很多人(包括我)都不是很清楚,经常犯错误(比如画出来的图只有黑白二色),于是把之前的一些总结共享出来。兼容DC 和 兼容位图 概念和作用我就不再介绍了,网上一搜一大堆,主要将我用CPPUnit做单元测试的代码贴出来,大家就清楚了。 //总结:创建兼容位图时,★不能★使用才创建好的内存兼容DCvoid原创 2012-03-27 21:31:09 · 3212 阅读 · 0 评论 -
FTL中高性能的日志系统(CFFastTrace)
在软件的开发中,往往要用日志(比如 TRACE/ ATLTRACE 等)来跟踪程序的运行,方便查找错误,确认性能等。但过少的日志不容易定位问题,过多的日志又难以分析,而且一个程序中多个线程的日志又交接在一起,又难于分析,等等诸多问题。因此,我在FTL中使用了高性能的日志跟踪类 FastTrace,将各个线程的日志输出到单独的目的地(文件)中,查看时再使用专门的工具进行查看,并且可以按照日志原创 2012-03-05 22:03:31 · 1568 阅读 · 0 评论 -
编译器选项检测文件 -- ftlConfigDetect.h
在编译时,IDE中往往有各种设置,经常会因为各个项目之间的配置不兼容造成问题,而检查起来还比较麻烦。因此制作了对IDE的各种配置进行检查的 ftlConfigDetect.h 文件,只要在 stdafx.cpp 等文件中包含,就可以检测出当前的很多配置信息,并在 Output 窗口中输出来,方便检查配置情况。注意:由于很久没有更新了,可能有些项目不是最新的(比如不识别 VS 2010),需原创 2012-02-22 20:37:02 · 928 阅读 · 0 评论 -
使用CSTD技术轻松编写0 Bug的代码
前言软件开发,在很多人的眼里是一件艰苦、困难的事情,在软件开发中发生诸多问题,如:1.“改一出两”或客户处发生但开发环境下不再现的Bug;2.客户“随心所欲”的更改要求,而现有的设计又无法满足。3.进行新项目开发时,由于没有一个好的通用架构,每次都要重新进行设计和实现,却无法在项目期限内获得高效、高质量的代码。以上等等诸多问题,使得开发人员经常加班却看不到多少效果,使得软件开发原创 2012-02-13 22:49:40 · 1835 阅读 · 0 评论 -
扩展的find算法 -- find_nearest(查询最接近的数据)
通常使用需要快速查找定位的数据时,会通过 set/map 等保存数据,然后使用find等算法进行查找。但有时想查找的数据不能完全匹配,而是查找一个最接近的值(比如,在两个不同的数据结构中,想匹配出ID相同,且发生时间最接近的数据)时,STL没有提供可用的函数,一般的做法就是将数据全部遍历计算一遍,然后选取最接近的值。其算法复杂度为 O(n)。通过扩展,写出通用的模版算法 find_nearest 可以完成这个功能原创 2011-01-08 18:17:00 · 4631 阅读 · 0 评论 -
服务程序性能优化之另辟蹊径
前言: 很久没写文章了,因为最近和朋友讨论问题时说到了性能优化这个话题,特将我之前解决一个linux下服务器性能问题的思路和方式共享一下。背景: 基本需求如下:在Linux下,有一台数据处理服务器,需要从网络上的很多节点获取信息,并按照管理员的要求进行分析和过滤,然后保存结果等待二次处理(从业务逻辑上,可以认为是网监部门从各位的QQ聊天中分析关键字,发现特别之处进行关注或请原创 2013-05-26 12:12:20 · 1385 阅读 · 0 评论