群里有好几个朋友要这个东西,我一直觉得不如直接在作业中自己调用的好。今晚阿木再次提起,就决定写一个辅助类给大家,供大家参考改进。这个功能就不集成到 QWorker 里了,做为一个扩展存在吧。 下面是全部代码: type TQInlineJob = class protected FJobProc: TQJobProcA
分类: QWorker
QWorker 更新 – TQPlanMask 新增 OnAcceptTime 事件以支持用户自定义的计划任务等更新
【更新说明】 TQPlanMask新增了三个成员: OnAcceptTime:用于让用户自行确定某个时间点是否应该执行计划任务作业; StartTime:用于确定计划任务作业的起始生效时间 StopTime:用于确定计划任务作业的结束时间 注意,如果设置了StartTime 和 StopTime,则必需保证 Start
QWorker 更新 – 修正了 TQJobGroup.Cancel 的一处Bug
【错误描述】 TQJobGroup.Cancel 调用了 TQSimpleJobs.Clear 来清除与自身相关的所有作业,而 TQSimpleJobs.Clear 时,只检查了作业的关联作业函数所隶属的对象,没有检查对应的分组,从而引发此问题。 【更新描述】 1、修正了前述错误; 2、修改了 TQJobGroup.C
阿姆达尔定律
阿姆达尔定律(英语:Amdahl’s law,Amdahl’s argument),一个计算机科学界的经验法则,因吉恩·阿姆达尔而得名。它代表了处理器平行运算之后效率提升的能力。 并行计算中的加速比是用并行前的执行速度和并行后的执行速度之比来表示的,它表示了在并行化之后的效率提升情况。 阿姆达尔
DIOCP 音儿小白精简版已经放到下载里供大家下载测试
这个版本是音儿精简自天地弦的 DIOCP ,并精简了 QWorker 做为 Iocp.Task ,欢迎大家下载测试。 下载地址:百度网盘
QWorker 更新 – 修正了在连续投送长时间作业场景下可能没有及时处理后续作业的问题
【问题描述】 直接连续投寄两个LongtimeJob,第二个作业会在约15秒后才开始执行。该问题是由于 LookupIdleWorker 没有正确的启动新的工作者造成的。 【更新级别】 推荐 【严重程度】 中 【特别感谢】 LakeView
[QWorker]更新 – 修正了上次修改超时解雇检测算法引入的新问题
【问题描述】 该问题是由于新修改的超时检测算法在达到 MinWorkers 这个下限时,由于并不会解雇工作者,但却忘记清掉 FTimeout 的累计值造成没有作业时阶段性CPU占用率过高。 【严重程度】 高 【更新级别】 推荐 【特别感谢】 恢弘
QWorker 更新 – 简化多个参数传递时的处理
【更新内容】 TQJobExtData 扩展了一个新的构造函数,接受一个array of const 数组来传递多个参数。首先是构造函数: constructor Create(const AParams: array of const); overload; 然后通过两个属性来访问其传入的参数: ParamCount
QWorker 更新 – TQJob 增加 Handle 属性
【更新说明】 根据 恢宏和音儿小白的建议,为 TQJob 加入了一个 Handle 属性,它对应的是你提交作业时返回的句柄的值。如果是一个空的未提供作业或者简单作业,返回的是实例本身的地址。 这个句柄可以用在 ClearSingleJob 等需要取消作业的场合,为了避免在作业中取消句柄对应的作业时,由于需要等待自身退出
QWorker 更新 – 修正了新版本在特定环境下退出会死掉的问题
【问题描述】 该问题是由于在退出时,检查后台统计线程是否完全退出时循环等待造成的。已知在Windows 7 操作系统中会存在该问题。 【严重程度】 中 【更新级别】 推荐 【特别感谢】 blessed
[教程]基于 QWorker 的多线程编程 – 计划任务
如果前面的各种设置无法满足你的要求,你可能需要的是计划任务。QWorker 支持 Linux 的 Cron 计划任务配置文件格式,可以直接调用 Plan 函数来传递格式字符串到程序中进行任务调度。 与普通的作业不同,计划的作业任务分辨率比较粗,与 Linux Cron 配置文件格式一样精确到分钟。 QWorker 支持
QWorker 更新 – 新增 Plan 函数添加个一个 Linux 样式的计划任务作业
【更新说明】 QWorker 新增了一个 Plan 函数来做计划任务作业的处理,与 At 和 Post 函数不同,Plan的计划任务掩码精度是精确到秒,而本次任务与下次任务之间的时间间隔并不是固定的,如每月1号执行的任务,牵涉到大小月间隔就不一样了。所以 QWorker 内部维护了一个独立的队列来处理此问题。 QWor
QWorker 更新 – 修正了 GetTimeStamp 函数长时间运行溢出造成定时任务调度失败的问题
【问题描述】 该问题是由于 GetTimeStamp 在实现时用高性能计数器取得的结果 ×10000 后再除以频率造成的,将实际的高精度计数器值乘10000后,约4天多一点的时间,就会造成溢出为负数。修改算法改为计数器从应用启动时开始计算并且先除以频率后再乘以10000,从而避免该问题。 【严重程度】 高 【更新级别】
重要更新 – 请 QXML、QJson、QMsgPack、QLog、QWorker 用户更新
【问题描述】 该问题是由于 TQStringCatHelperW.Cat 函数在连接字符串时,计算需要的内存缓冲区大小不正确,可能造成构造较长的结果字符串时结果不正确,甚至可能出现 Access Volition 错误。问题发生在下面两个函数: function TQStringCatHelperW.Cat(p: PQ
QWorker 更新 – 修正了重复作业间隔很长时,比较时由于算术溢出造成的问题
【问题描述】 该问题是由于 TQRepeatJobs.DoTimeCompare 函数的问题没有考虑到算术溢出问题造成的,原来的比较代码如下: function TQRepeatJobs.DoTimeCompare(P1, P2: Pointer): Integer; begin Result := PQJob(P1)
QDAC 更新 – 修正了多个模块与 2007 和 Android 编译的兼容性问题
【更新内容】 qstring 新增 NewId 函数,qcndate、qxml、qtimetypes、qmacros、qmapsymbols、qdigest、qworker 修正了与Delphi 2007 的兼容性问题。 修改完的兼容性测试结果如下(QDB在开发过程中,未做任何兼容性处理): 【更新级别】 可选 【特别
QWorker 更新 – TQJobGroup 新增 Insert 函数来临时插入一个作业
【更新说明】 如果我们在顺序作业执行过程中,想要临时在作业中插入一个作业时,由于 Add 函数只能追加到尾部而无法完成。新增的 Insert 函数可以辅助用户方便的完成此作业。 首先我们看函数说明: /// <summary>插入一个作业过程,如果准备内部计数器为0,则直接执行,否则只添加到列表</s
QWorker更新-新增几个方法以简化与主线程交互编程
【更新说明】 1、TQJob.Synchronize 新增匿名函数版本; 2、新增 RunInMainThread 系列函数: TMainThreadProc=procedure (AData:Pointer) of object; TMainThreadProcG=procedure (AData:Pointer);
QWorker 更新 – 修正了在使用 FastMM 的 FullDebugInIDE 模式时退出时出错的问题
【问题描述】 该问题是由于 TStaticThread.Execute 等待事件超时时,未检查 Workers 对象是否处于清理状态造成的: … wrTimeout: begin if (not Workers.Terminating) and Assigned(Workers.FSimpleJobs) and (
QWorker 更新 – 修正了已知的三处问题
【问题描述】 1、TQSimple.Clear函数在第一个就符合条件时,未设置 AFirst 值,造成 Repush 时,作业很可能丢失。 2、TQWorkers.Post、At 的 AInterval 参数值为负数时,会引起作业被立即循环处理,从而造成 CPU 占用率过高。 3、如果提交一个重复作业后,立即提交一个需