kbmMW Scheduler的cron的用法
使用kbmMW Scheduler做定时任务,是一件非常爽的工作,看完下面的内容相信你也能同样爽!
什么是cron,参考 详解定时任务中的 cron 表达式
kbmMW Scheduler支持cron,可以按cron执行任务。看代码:
KeepLiveScheduledEvent := Scheduler .Schedule(procedure(const AScheduledEvent: IkbmMWScheduledEvent) begin ShowMsg('开始查询:'+FormatDateTime('yyyy-mm-dd hh:nn:ss', Now)); LocalDataModule.Check; ShowMsg('完成查询:'+FormatDateTime('yyyy-mm-dd hh:nn:ss', Now)); end) .SynchronizedAfterRun(procedure(const AScheduledEvent: IkbmMWScheduledEvent) begin // end) .Cron('0 0 8 * * 1 *',TkbmMWScheduleCronMode.mwscmExtendedSecondAndYear)//每周一早上8点执行任务 .WhenException(procedure(const AScheduledEvent: IkbmMWScheduledEvent; const AException: Exception) begin ShowMsg('查询出错:' + AException.Message); end);
上面的代码,定义每周一早8点执行一个任务,并给用户发送通知短信。
这段代码,利用kbmMW Scheduler 框架,关于kbmMW Scheduler,可以参考我以前写的文章。
现在重点看一下Cron方法,原型如下:
function Cron(const AString:string; const AMode:TkbmMWScheduleCronMode = mwscmExtendedYear):IkbmMWScheduledEvent;
第一个参数AString是cron表达式
第二个参数AMode决定cron表达式的格式。在例子代码中,AMode=TkbmMWScheduleCronMode.mwscmExtendedSecondAndYear,决定cron格式为7位,即:秒 分钟 小时 日 月份 周(星期) 年份,对于这种格式的cron定义,可利用在线cron设计器来设置。这样的话,你可以不懂cron的语法,也能轻松设计出你想要的cron表达式了。
对于cron方法,AMode默认值为TkbmMWScheduleCronMode.mwscmExtendedYear,决定cron格式为5位或者6位,5位时,含义为:分钟 小时 日 月份 周(星期),6位时,含义为:分钟 小时 日 月份 周(星期) 年份,比5位多了年份位。
现在可以看下TkbmMWScheduleCronMode枚举类型每个值的长度及含义:
类型 | 长度 | 含义 |
mwscmStandard | 5 | 分钟 小时 日 月份 周(星期) |
mwscmExtendedYear | 5或6 | 分钟 小时 日 月份 周(星期) 年份 |
mwscmExtendedSecond | 5或6 | 分钟 小时 日 月份 周(星期) 年份 |
mwscmExtendedSecondAndYear | 5或7 | 秒 分钟 小时 日 月份 周(星期) 年份 |
mwscmExtendedMsecAndYear | 5或8 | 毫秒 秒 分钟 小时 日 月份 周(星期) 年份 |
好了,现在我们就可以轻松的使用kbmMW Scheduler来做定时任务了!
补充,Scheduler还有两个属性:
property CronString:string read GetCronString write SetCronString;//Cron串,设置时,同时调用Cron方法 property CronMode:TkbmMWScheduleCronMode read GetCronMode write SetCronMode;//Cron 模式,不会调用Cron方法
通过这两个属性,可以取替直接调用Cron方法。其实,无所谓了,感觉kbmMW把问题搞复杂了!