- UPDATE -
好的,这是我到目前为止所知道的。
对于应该每周运行一次的事件,这就是我所做的。
for和应该每x个月或每年运行的事件
在进行实际计算之前还需要执行一些其他检查
就像确保现在正好......等等
现在是一个简单的例子
开始时间戳2010 - 11 - 23每3个月
现在假装今天的日期是2011年 - 02 - 23
然后计算将如下所示。
if(Sch_Date == Current_Data)// if(23 == 23)
if(!((Sch_Month - Current_Month)%3))// if(!((11-2)%3)//等于零
我希望这是有道理的让我知道如果我错过了什么
1
嗨,
我正在编写STM32微编程,我需要创建一个调度引擎,允许用户在给定的时间和间隔内安排任务。
我有一个RTC,它将为我提供当前时间戳。我陷入困境的部分是如何应对经常发生的事件。
即。
如果用户想要每周五,每周,每两周,每月或每年运行一些东西。
用户向我提供了一个开始和结束时间以及一个反复出现的标志,告诉我他希望这个日子运行的时间和频率。
我希望我说得够清楚。
如果您有任何想法和/或问题,我们将不胜感激
更新
这是我的具体问题。
我经常检查设备以查看是否应该启动任何计划条目。我认为通过示例描述它的最佳方式
用户发送此事件
开始时间 2010 11 09 TUE 16 30 00
结束时间 2012 11 09
每周二每周两次复活标记
我可以检查事件是否已准备好开始,但我如何处理它应该每两周发生一次的事实我需要一些帮助编码算法来处理递归
答案 0 :(得分:3)
根据您所描述的具体问题:
对于每个新条目,计算并记录事件需要触发的第一个时间的时间戳(例如2010-11-09_16:30
)。当事件触发时,根据标志(例如2010-11-23_16:30
)计算事件需要触发的 next 时间的时间戳,并替换记录。
请注意,最好将所有时间戳转换为标准值,例如Unix time。
答案 1 :(得分:1)
我实施了一个类似的系统并将其实现为described by Oli Charlesworth。我有一张时间表。在启动时创建所有下一个事件的列表,其中包含指向原始表条目的指针并对它们进行排序,以便我只需要检查表中的第一个条目(稍后我使用了一个可能导致特定中断的RTC)时间)。当一个事件被触发时,我检查了它可以删除用户条目,或者需要留在表中并重新安排事件。