我正在编写一个自定义计时器类,它将使用变量间隔引发事件,具体取决于每天的计时器(可能是星期几)以触发刷新数据。至于粒度,我可能会在小时级别有不同的间隔。
到目前为止,我提出的最佳选择是使用24个元素阵列。每当计时器滴答时,您将获取当前小时(24小时)并将索引放入数组以获得新的计时器间隔。我可能需要一些逻辑来处理从长到短的间隔会导致一些预期的刷新被错过的情况(例如,如果我们从长到短的间隔,在一小时的顶部截断)。
我正在寻找一种优雅的方式来执行此操作,任何维护我的代码的人都很清楚,并且很容易在代码中使用。有更好的算法/方法吗?
额外详情:
用户可以触发手动刷新,这会导致计时器重置。因此,计时器不需要“按小时”或任何其他常规间隔(如1:15, 1:30, 1:45
)。用户可能会在我们检查后2分钟触发刷新,因此,如果我们每15分钟检查一次,我们可能会收到类似:1:15, 1:30, 1:32, 1:47
的内容(用户在1:32
手动刷新,因此我们重置计时器并从那个时间点开始自动刷新15分钟。
由于该间隔在我正在开发的系统中是标准的,所以我可以对它进行硬编码。此时不需要它是通用间隔计时器(尽管欢迎使用通用的解决方案)。
答案 0 :(得分:1)
据我所知,您需要通过计时器子系统实现以下活动
1.系统的自动触发以预定义的间隔刷新
2.触发系统刷新的用户,可以是任何情况
3. ticker
监视上述内容并触发刷新。
我在下面有一些指示 - 虽然可能无法完全回答你所有的疑虑
1.列出的上述三项任务可以被识别为3个不同线程的一部分。这将共同设置和取消设置事件。即任务1和2将设置一个事件,任务3将取消设置和事件,这些事件是一个并且在线程之间共享。
2.现在对于点-1,即预定义的间隔,解决方案变得更加简单。对于每个间隔(即假设您已计划刷新10分钟,13分钟等),从当前时间开始计算下一个差分时间,当它为零时,您可以设置事件。
当然,你可以通过建模interval
,Event(s)
等来改进抽象。但根据我的经验,对于基于精度的低级精度要求,如计时器,日程安排等,我感觉更强> C
这种方法更合适
HTH!