AD商业广告自由选择
AD商业广告自由选择

Lengend线程分析

正文概述 开源人   2024-10-16 15:40:25  

TThreadPool 线程池基类 主要负责线程初始化 与管理任务队列 不管理线程自身5HX1234FCOM专注游戏工具及源码例子分享

主要方法2个构造函数5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TThreadPool.Create(ThreadCount: Integer = MAX_THREAD_COUNT; MaxWork:5HX1234FCOM专注游戏工具及源码例子分享

  Integer = MAX_QUEUE_WORK_COUNT);5HX1234FCOM专注游戏工具及源码例子分享

初始化线程数量 并设置最大值 最大值也用于工作队列 5HX1234FCOM专注游戏工具及源码例子分享

InitPool(ThreadCount); 具体设置工作队列5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TThreadPool.Create(ThreadClass: TThreadClass; ThreadCount: Integer; MaxWork: Integer);5HX1234FCOM专注游戏工具及源码例子分享

创建线程函数 TThreadClass = TPoolThread5HX1234FCOM专注游戏工具及源码例子分享

并设置OnThreadBegin OnThreadEnd 事件处理函数 添加到FThreadList(TPoolThread)5HX1234FCOM专注游戏工具及源码例子分享

InterlockedIncrement原子操作计任务数量5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

DeleteMandatory删除指定任务5HX1234FCOM专注游戏工具及源码例子分享

StopAllThread停止所有任务5HX1234FCOM专注游戏工具及源码例子分享

ClearAllThread 清除5HX1234FCOM专注游戏工具及源码例子分享

FindThread 查找5HX1234FCOM专注游戏工具及源码例子分享

GetThreadItem 按index 查找5HX1234FCOM专注游戏工具及源码例子分享

CreateNewThread 执行TPoolThread .create5HX1234FCOM专注游戏工具及源码例子分享

TThreadPool.SetManageThread(ThreadClass: TThreadClass); 设置 此函数作用不明5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TPoolThread 管理线程自身 确切的说是线程池就是管理此类5HX1234FCOM专注游戏工具及源码例子分享

此类设计比较蛋疼 本应该是个独立的管理类负责管理 线程的挂起 运行5HX1234FCOM专注游戏工具及源码例子分享

却又写个了run虚函数 实在是不解5HX1234FCOM专注游戏工具及源码例子分享

本应把API丢给 TThreadPool 创建  5HX1234FCOM专注游戏工具及源码例子分享

正确的做法是 设计 ThreadManager 5HX1234FCOM专注游戏工具及源码例子分享

TPoolThread简化成结构体 包含ThreadManager  task 线程锁 标志5HX1234FCOM专注游戏工具及源码例子分享

然后用一个数组或者链表维护 具体的任务交由task的run函数去执行5HX1234FCOM专注游戏工具及源码例子分享

thread_proc 里去执行task.run5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TWorkQueue 工作队列 TThreadPool.AddWork添加到此队列中5HX1234FCOM专注游戏工具及源码例子分享

父类TQueue 实现简单的链表功能5HX1234FCOM专注游戏工具及源码例子分享

同单元的TStack类 预分配一块内存  模拟了栈的快速的寻址 缺点空间太小5HX1234FCOM专注游戏工具及源码例子分享

同单元的TList 实现使用内存管理5HX1234FCOM专注游戏工具及源码例子分享

TVector 容器 简单管理5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

带有APC 的是作者简单线程池实现5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

BaseThreadProc task.run类似5HX1234FCOM专注游戏工具及源码例子分享

TBaseThread更像我说的 ThreadManager 包含线程策略5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TInterfacePoolThread 继承自TPoolThread 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

IThreadRun run接口 APC的5HX1234FCOM专注游戏工具及源码例子分享

总结两种线程池结合 完美5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

补充5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

具体的类结构图5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TThreadPool 线程池基类 没有派生类5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TBaseThread 虚基类 用户线程从此派生 托管了一个  IBaseThread = interface5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TPoolThread 虚基类 派生类 TInterfacePoolThread(托管一个 IPoolThread = interface)5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TBaseThread(用户类)  TPoolThread)(池任务) 两者在内存池中进行关联5HX1234FCOM专注游戏工具及源码例子分享

FThreadClass := TInterfacePoolThrea5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

 5HX1234FCOM专注游戏工具及源码例子分享

TAPC开头的未使用5HX1234FCOM专注游戏工具及源码例子分享



声明:本文系互联网搜索而收集整理,不以盈利性为目的,文字、图文资料源于互联网且共享于互联网。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。