快捷搜索:  汽车  科技

c语言实时调度任务算法实现(C定时任务之Quartz.Net)

c语言实时调度任务算法实现(C定时任务之Quartz.Net)//首先需要先去从nuget下载Quartz引用到我们的项目 //实现IInterruptableJob接口,实现我们需要操作的逻辑 public class MyJob : IInterruptableJob { public void Execute(IJobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; string tag = dataMap.GetString("tag"); Form1.form1.AddText(tag "-------" DateTime.Now); } public void

上一篇写到的使用windows任务计划程序来实现定时任务,但这种方式在开发过程中不是太灵活,很难满足我们时需时用;所以我们如果能在代码中来实现的话就会比较得心应手;

所以这篇来简单介绍下Quartz.Net这个任务调度系统的使用方式。

c语言实时调度任务算法实现(C定时任务之Quartz.Net)(1)

实现功能:

使用Quartz.Net实现定时、定点触发

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

//首先需要先去从nuget下载Quartz引用到我们的项目 //实现IInterruptableJob接口,实现我们需要操作的逻辑 public class MyJob : IInterruptableJob { public void Execute(IJobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; string tag = dataMap.GetString("tag"); Form1.form1.AddText(tag "-------" DateTime.Now); } public void Interrupt() { throw new NotImplementedException(); } }

public static void StartJob() { //创建任务调度器 ISchedulerFactory schedulefactory = new StdSchedulerFactory(); IScheduler scheduler = schedulefactory.GetScheduler(); //启动任务调度器 scheduler.Start(); //创建任务作业 //指定时间触发 IJobDetail jobDetail = JobBuilder.Create<MyJob>().UsingJobData("tag" "jobDetail").Build(); //间隔时间触发 IJobDetail jobDetail2 = JobBuilder.Create<MyJob>().UsingJobData("tag" "jobDetail2").Build(); //创建触发器 DateTime dt = DateTime.Now.AddSeconds(10); //指定时间触发 //表达式含义可参考:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html string t = string.Join(" " dt.Second dt.Minute dt.Hour dt.Day dt.Month "?" dt.Year); var cronTrigger = TriggerBuilder.Create() .WithSchedule(CronScheduleBuilder.CronSchedule(t).InTimeZone(TimeZoneInfo.Local)) .Build(); //间隔时间段触发 //WithRepeatCount表示重复的次数,第一次执行不算重复次数,所以最终执行次数为设置的重复次数 1 var cronTrigger2 =TriggerBuilder.Create() .WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(3)).Build(); IDictionary<IJobDetail Quartz.Collection.ISet<ITrigger>> dic = new Dictionary<IJobDetail Quartz.Collection.ISet<ITrigger>>(); dic.Add(jobDetail new Quartz.Collection.HashSet<ITrigger> { cronTrigger }); dic.Add(jobDetail2 new Quartz.Collection.HashSet<ITrigger> { cronTrigger2 }); //把作业,触发器加入调度器 scheduler.ScheduleJobs(dic true); } //最后调用StartJob方法即可 private void btnQuartz_Click(object sender EventArgs e) { StartJob(); }

实现效果:

c语言实时调度任务算法实现(C定时任务之Quartz.Net)(2)

我这里用winform来做这个测试,当然我认为这并不太合适。

此篇只是介绍了下Quartz.Net简单的使用方法,还有其他更高级的功能大家可以去官网自行学习。

由简入繁,拿来即用

后续精彩,持续关注

猜您喜欢: