YxdWorker 后台工作者管理库 (QWorker修改版)
感谢Swish群主(人见人爱花见花开),为了QWorker负出了很多时间和精力。
--------------------------------------------------------------------
说明
--------------------------------------------------------------------
YxdWorker 基于QDAC项目的QWorker ,并且绝大部分代码来自于此,
感谢swish和他的QWorker,QDAC。YxdWorker 版权归swish, YangYxd所有
QWorker来自QDAC项目,版权归swish(QQ:109867294)所有
QDAC官方群:250530692
QDAC官方网站: http://www.qdac.cc
SVN: https://github.com/yangyxd/YxdWorker
【下载地址】: http://pan.baidu.com/s/1ntJ1m9z 【提取密码】: ryrq
--------------------------------------------------------------------
更新记录
--------------------------------------------------------------------
2015.04.14 ver 1.1.6
--------------------------------------------------------------------
- TJob增加Handle属性,可以在作业中查看自己的Handle. 比如定时作业中,
可以用Handle来取消任务.
- 其它细小修改
2015.04.03 ver 1.1.5
--------------------------------------------------------------------
- 修正了 GetTimeTick 函数溢出造成定时作业调度失败的问题 (同步QWorker)
- 修正了 TQRepeatJobs.DoTimeCompare 比较时间时算术溢出,造成特定应用
环境下出错的问题 (同步QWorker)
2015.01.29 ver 1.1.4
--------------------------------------------------------------------
- TJobGroup.Cancel增加是否等待正在运行的作业结束参数
- 修正了 TSimpleJobs.Clear 如果第一个就满足需要时算法逻辑出错的
问题(KEN)
2014.11.11 ver 1.1.3
--------------------------------------------------------------------
- 修复在Android平台中存在的Bug
- 修改 TJobHandle 为 NativeInt,在64位时使用64位整数
2014.11.08 ver 1.1.2
--------------------------------------------------------------------
- 将重复定时作业Data为自动释放时,由完成一次以后就释放改为直到作业
被取消时才释放
- 修正了Job.Assign时,忘记增加引用计数的问题
2014.11.08 ver 1.1.1
--------------------------------------------------------------------
- 修改作业投寄 Post 的返回值为 TJobHandle 型, 用来唯一标记一项作
业,可以在需要时调用Clear(句柄值)来清除相应的作业 (恢宏)
- 将并行 For 移入 TYxdWorkers 中,直接使用 Workers.&For 即可
- 增加 Job.ExData 扩展数据,可以使用 NewExData 初始化。
- 修复定时循环作业且Data为自动释放时,完成一次以后Data已经被释放,
但在下次触发时仍然存在这个Data的Bug.
- 增加条件编译开关 AutoFreeJobExData, 启用时强制释放作业的ExData,
不管FreeType是什么。
2014.10.14 ver 1.1.0
--------------------------------------------------------------------
- 增加GetWorkerState方法,输出各工作者状态
- 开启 Use_DebugHelper 编译开关时,需要引用 YxdMapFile,可查看作业
的函数名称
- 稳定版,修复所有已知BUG
2014.09.29 ver 1.0.9
--------------------------------------------------------------------
- 增加并行 For, 访问方式为TForJobs.For(...) (同步QWorker)
- 加入后台对CPU利用率的检查,在CPU占用率较低时且有需要立即处理的作
业时,启动新工作者 (同步QWorker)
- 修正了未达到工作者线程上限,但已创建的工作者都在工作中时可能造成
的延迟问题 (同步QWorker)
- 修改TQJobProc/TQJobProcA/TQJobProcG的写法,以便更方便阅读 (同步
QWorker)
- 修复所有已知BUG
2014.09.10 ver 1.0.8
--------------------------------------------------------------------
- 修复TimeToDelay函数错误
2014.09.05 ver 1.0.7
--------------------------------------------------------------------
- 修复JobGroup不能并行执行的BUG
- 修改HasJobRunning函数,解决JobGroup执行时,由于每个Job运行时间很
长导致Celar失败的问题。
2014.08.30 ver 1.0.6
--------------------------------------------------------------------
- 修复开启定时作业后,线程回收机制失效BUG
- 解决FBusyCount计数器相关的BUG
- 提升稳定性,测速时速度下降,总体来说提升了性能
2014.08.25 ver 1.0.5
--------------------------------------------------------------------
- 作业附加的Data释放方式新增jdfFreeAsC1~jdfFreeAsC6以便上层自己管理
Data成员数据的自动释放
- 优化FreeJob, FreeJobData
2014.08.23 ver 1.0.4
--------------------------------------------------------------------
- 解决Busy计数器BUG
2014.08.22 ver 1.0.3
--------------------------------------------------------------------
- 解决JobGroup超时和Cancel的问题,解决某些原因引起测速很慢的问题
- 提取合并部分代码,减少体积
2014.08.16 ver 1.0.2
--------------------------------------------------------------------
- 改进长时间任务处理方式 ,TSimpleJobs增加 FLongFirst,FLongLast 专
门应对长时间任务,解决长时间任务导致Clear失败BUG
- 同步QWorker修改TQJobGroup.AfterDone改为除了在完成时,在中断或超时
时仍然触发
- 同步QWorker增加TQJobGroup.Run函数加入超时设置,超过指定的时间如果
仍未执行完成,则中止后续执行
- 同步QWorker增加TQJobGroup.Cancel函数用于取消未执行的作业执行
2014.08.16 ver 1.0.1
--------------------------------------------------------------------
- 增加 FOnErrorNotify通知事件,以便使用者可以记录相关日志
- 将原QWorker中的Delay,At,Post合并为Post方法。
- 将原QWorker中的时间精度由0.1ms调整为1ms.
- 将原QWorker中TJobHelper的功能直接放入TJob中,以便在D2007中还能保
持良好的语法提示
- 将原QWorker中Worker类设置Flags相关功能改为GetValue,SetValue,减小
单元大小
- 对JobGroup的Add功能增加参数AFreeType, 并默认AInMainThread=False
- 提取合并部分代码,减少单元大小
- 删除Job中的Owner字段
--------------------------------------------------------------------
使用方法很简单, 引用 YxdWorker.pas 单元, 使用 Workers.Post(XXXX) 就可以了。