TThreadPool 线程池基类 主要负责线程初始化 与管理任务队列 不管理线程自身gaY1234FCOM专注游戏工具及源码例子分享
主要方法2个构造函数gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TThreadPool.Create(ThreadCount: Integer = MAX_THREAD_COUNT; MaxWork:gaY1234FCOM专注游戏工具及源码例子分享
Integer = MAX_QUEUE_WORK_COUNT);gaY1234FCOM专注游戏工具及源码例子分享
初始化线程数量 并设置最大值 最大值也用于工作队列 gaY1234FCOM专注游戏工具及源码例子分享
InitPool(ThreadCount); 具体设置工作队列gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TThreadPool.Create(ThreadClass: TThreadClass; ThreadCount: Integer; MaxWork: Integer);gaY1234FCOM专注游戏工具及源码例子分享
创建线程函数 TThreadClass = TPoolThreadgaY1234FCOM专注游戏工具及源码例子分享
并设置OnThreadBegin OnThreadEnd 事件处理函数 添加到FThreadList(TPoolThread)gaY1234FCOM专注游戏工具及源码例子分享
InterlockedIncrement原子操作计任务数量gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
DeleteMandatory删除指定任务gaY1234FCOM专注游戏工具及源码例子分享
StopAllThread停止所有任务gaY1234FCOM专注游戏工具及源码例子分享
ClearAllThread 清除gaY1234FCOM专注游戏工具及源码例子分享
FindThread 查找gaY1234FCOM专注游戏工具及源码例子分享
GetThreadItem 按index 查找gaY1234FCOM专注游戏工具及源码例子分享
CreateNewThread 执行TPoolThread .creategaY1234FCOM专注游戏工具及源码例子分享
TThreadPool.SetManageThread(ThreadClass: TThreadClass); 设置 此函数作用不明gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TPoolThread 管理线程自身 确切的说是线程池就是管理此类gaY1234FCOM专注游戏工具及源码例子分享
此类设计比较蛋疼 本应该是个独立的管理类负责管理 线程的挂起 运行gaY1234FCOM专注游戏工具及源码例子分享
却又写个了run虚函数 实在是不解gaY1234FCOM专注游戏工具及源码例子分享
本应把API丢给 TThreadPool 创建 gaY1234FCOM专注游戏工具及源码例子分享
正确的做法是 设计 ThreadManager gaY1234FCOM专注游戏工具及源码例子分享
TPoolThread简化成结构体 包含ThreadManager task 线程锁 标志gaY1234FCOM专注游戏工具及源码例子分享
然后用一个数组或者链表维护 具体的任务交由task的run函数去执行gaY1234FCOM专注游戏工具及源码例子分享
thread_proc 里去执行task.rungaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TWorkQueue 工作队列 TThreadPool.AddWork添加到此队列中gaY1234FCOM专注游戏工具及源码例子分享
父类TQueue 实现简单的链表功能gaY1234FCOM专注游戏工具及源码例子分享
同单元的TStack类 预分配一块内存 模拟了栈的快速的寻址 缺点空间太小gaY1234FCOM专注游戏工具及源码例子分享
同单元的TList 实现使用内存管理gaY1234FCOM专注游戏工具及源码例子分享
TVector 容器 简单管理gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
带有APC 的是作者简单线程池实现gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
BaseThreadProc task.run类似gaY1234FCOM专注游戏工具及源码例子分享
TBaseThread更像我说的 ThreadManager 包含线程策略gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TInterfacePoolThread 继承自TPoolThread gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
IThreadRun run接口 APC的gaY1234FCOM专注游戏工具及源码例子分享
总结两种线程池结合 完美gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
补充gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
具体的类结构图gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TThreadPool 线程池基类 没有派生类gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TBaseThread 虚基类 用户线程从此派生 托管了一个 IBaseThread = interfacegaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TPoolThread 虚基类 派生类 TInterfacePoolThread(托管一个 IPoolThread = interface)gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TBaseThread(用户类) TPoolThread)(池任务) 两者在内存池中进行关联gaY1234FCOM专注游戏工具及源码例子分享
FThreadClass := TInterfacePoolThreagaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
gaY1234FCOM专注游戏工具及源码例子分享
TAPC开头的未使用gaY1234FCOM专注游戏工具及源码例子分享