欢迎来到天天文库
浏览记录
ID:12550583
大小:35.16 KB
页数:13页
时间:2018-07-17
《中间层技术及多线程技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、中间层各单元介绍二、中间层重要的类介绍三、帮大家分析一下RO是怎么工作的四、多核时代下的多线程编程----帮大家读懂TThread类(重点)1、中间层各单元介绍单元名作用BestSQL.pasBestConst.pasBestDes.pasBestFunc.pasgunFunSys.pasAdo_ConnectionPool.pas连接池单元,主要用于客户端OpenDataBHServerLib_Intf.pas中间层接口单元BHServerLib_Invk.pas中间层接口代理单元BH_MSSQL_Service
2、_Impl.pas中间层接口实现单元fServerForm.pas主窗口Provider.pasUnit_Global.pas列表对象池单元,用于客户端OpenList2、中间层重要的类介绍类名重要属性方法Ado_ConnectionPool.pas单元:TConnObject池内对象类TConnectionPools池对象类DoIncObjects方法---------增加池内部对象组成单向链表GetInstance方法----------从池里取可用的对象ReleaseInstance方法----将使用后的对象还原
3、回池ReleaseInstances方法----供检测线程调用,用于关闭长时间没有使用的TConnObject对象的数据库连接(TMSConnection)Unit_Global.pas单元:TMyHashedStringList类1、先解读IniFiles.pas单元下的THashedStringList类主要是看THashedStringList在修改删除时如何处理Hash值2、TMyHashedStringList对THashedStringList的不足做了重要的调整,在大数据量的情况下性能提高很多Unit_G
4、lobal.pas单元:TGroupObject池内对象类TPoolGroupObject池对象类IncObjects方法---------增加池内部对象组成双向链表GetGroupObject方法----------从池里取可用的对象ObjectsNoUseByStr和ObjectsSetCanUsed方法----将使用后的对象还原回池CheckGroupObject方法----供检测线程调用,用于关闭长时间没有使用的TGroupObject对象Unit_Global.pas单元:TSafedStringList类中
5、间层就是用这个类来存储用户列表的。我们都知道Delphi本向是有一个TStringList类的,但是我可以查看一下TStringList类的实现代码,我们会发现TStringList不是线程安全的。中间层的一个首要任务就是要处理多用户并发的情况也就是要处理好多线程的线程安全问题,因些才重新写了这个TSafedStringList类。它的继承关系是:TSafedStringList=class(TObject)当然了,你也可以直接从TStringList类继承下来,再改写相应的方法即可。3、帮大家分析一下RO是怎么工作的
6、Server端1、TROCustomSuperTcpServer.IntExecute在其Create事件里有fIndyServer:=TIdTCPServer.Create(nil);fIndyServer.OnExecute:=IntExecute;在IdCustomTCPServer.pas单元的TIdListenerThread.Run里调用2、TROSCServerWorker.DoExecute;会一直循环直到Client端断开。当Client端有数据请求的时候,会触发TROSCServerWorker.I
7、ncomingData事件3、TROSCServerWorker.IncomingData会接着触发TROCustomSuperTcpServer.HasData事件4、TROCustomSuperTcpServer.HasData会执行TROInvokerQueueItem.Create并将创建的对象执行TROThreadPool.QueueItem5、TROThreadPool.QueueItem执行后最终会由TROPooledThread来调用TROInvokerQueueItem.Callback6、终于在TR
8、OInvokerQueueItem.Callback里调用又回到TROCustomSuperTcpServer.DispatchMessage(其实是TROServer.DispatchMessage)重点参考下图的调用过程7、XXXX_Invk.pas单元定义的TXXXX_Invoker类是在MainProcessMessage
此文档下载收益归作者所有