Lengend线程分析

TThreadPool 线程池基类 主要负责线程初始化 与管理任务队列 不管理线程自身

主要方法2个构造函数

TThreadPool.Create(ThreadCount: Integer = MAX_THREAD_COUNT; MaxWork:

Integer = MAX_QUEUE_WORK_COUNT);

初始化线程数量 并设置最大值 最大值也用于工作队列

InitPool(ThreadCount); 具体设置工作队列

TThreadPool.Create(ThreadClass: TThreadClass; ThreadCount: Integer; MaxWork: Integer);

创建线程函数 TThreadClass = TPoolThread

并设置OnThreadBegin OnThreadEnd 事件处理函数 添加到FThreadList(TPoolThread)

InterlockedIncrement原子操作计任务数量

DeleteMandatory删除指定任务

StopAllThread停止所有任务

ClearAllThread 清除

FindThread 查找

GetThreadItem 按index 查找

CreateNewThread 执行TPoolThread .create

TThreadPool.SetManageThread(ThreadClass: TThreadClass); 设置 此函数作用不明

TPoolThread 管理线程自身 确切的说是线程池就是管理此类

此类设计比较蛋疼 本应该是个独立的管理类负责管理 线程的挂起 运行

却又写个了run虚函数 实在是不解

本应把API丢给 TThreadPool 创建

正确的做法是 设计 ThreadManager

TPoolThread简化成结构体 包含ThreadManager  task 线程锁 标志

然后用一个数组或者链表维护 具体的任务交由task的run函数去执行

thread_proc 里去执行task.run

TWorkQueue 工作队列 TThreadPool.AddWork添加到此队列中

父类TQueue 实现简单的链表功能

同单元的TStack类 预分配一块内存  模拟了栈的快速的寻址 缺点空间太小

同单元的TList 实现使用内存管理

TVector 容器 简单管理

带有APC 的是作者简单线程池实现

BaseThreadProc task.run类似

TBaseThread更像我说的 ThreadManager 包含线程策略

TInterfacePoolThread 继承自TPoolThread
IThreadRun run接口 APC的

总结两种线程池结合 完美

补充

具体的类结构图

TThreadPool 线程池基类 没有派生类

TBaseThread 虚基类 用户线程从此派生 托管了一个  IBaseThread = interface

TPoolThread 虚基类 派生类 TInterfacePoolThread(托管一个 IPoolThread = interface)

TBaseThread(用户类)  TPoolThread)(池任务) 两者在内存池中进行关联

FThreadClass := TInterfacePoolThrea

TAPC开头的未使用

下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【安安资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容,由于源码具有复制性,一经售出,概不退换。
安安资源网 » Lengend线程分析