标签:time 都对 init term 假设 cal 时间 执行 启动
如果是启动某程序,可以透过系统功能办到,但如果要能够让使用者设定,一天多个时间启动,或者是WinCE,就需要自己制作
整点检查基本上是不可能的,因为在polling的时候,没可能连毫秒都相等,又或者说程序在处理很多事情时,连秒都对不上
所以一定要用范围检查,而且要避免重复启动,及节省polling的资源,所以我就用以下方法
?如果是启动某程序,可以透过系统功能办到,但如果要能够让使用者设定,一天多个时间启动,或者是WinCE,就需要自己制作
整点检查基本上是不可能的,因为在polling的时候,没可能连毫秒都相等,又或者说程序在处理很多事情时,连秒都对不上
所以一定要用范围检查,而且要避免重复启动,及节省polling的资源,所以我就用以下方法
定一个时间范围{Tolerance To}的变量,检查范围是发动时间{Trigger Ti},那检查范围就是Ti-To ~ Ti+To,检查周期也是To
结果就是把时间切会以2To为单位,来检查是否需要启动,如果缩短To,就可以增加精度,拉长To就可以节省资源,再配合一天会发动多少次就可以得出该用的To
程序大概会长这样
//假设有一个TriggerTime的类可以记录一个时间点,例如12:30 TriggerTime triggerTime; long toleranceTime; //init TriggerTime objects DateTime l_triggerTime = DateTime.Now.Date + triggerTime; DateTime l_lowerBound = DateTime.Now - toleranceTime; DateTime l_upperBound = DateTime.Now + toleranceTime; bool isTerminate = false; while(!isTerminate) { if(l_triggerTime > l_lowerBound && l_triggerTime < l_upperBoud) { //...trigger your DoWork } Thread.Sleep(toleranceTime); }
至于RTOS的WinCE有没有System Time Event的功能,我还在研究,目前是用这样的方法
My WP Blog with english technical docs.
原文:大专栏 制作每天定时执行的功能
标签:time 都对 init term 假设 cal 时间 执行 启动
原文地址:https://www.cnblogs.com/petewell/p/11526607.html