依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 777|回复: 0

Lengend线程分析

[复制链接] |主动推送主动推送

3746

主题

3785

帖子

4638

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4638
发表于 2020-12-22 10:26:57 | 显示全部楼层 |阅读模式
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开头的未使用

0010.jpg


扫码关注微信公众号,及时获取最新资源信息!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-3-29 13:47

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表