0

我正在编写一个自定义计时器类,它将根据一天中的计时器(可能还有一周中的一天)引发具有可变间隔的事件以触发数据刷新。至于粒度,我可能会在小时级别有不同的时间间隔。

到目前为止,我想出的最佳选择是使用 24 元素数组。每当计时器滴答作响时,您都会获取当前小时(24 小时)并索引到数组中以获取新的计时器间隔。我可能需要一些逻辑来处理从长间隔到短间隔会导致错过一些预期刷新的情况(例如,如果我们从长间隔变为短间隔,则在一小时的顶部截断)。

我正在寻找一种优雅的方式来做到这一点,任何维护我的代码的人都清楚,并且易于在代码中使用。有没有更好的算法/方法来做到这一点?

额外细节:

用户可以触发手动刷新,这会导致计时器重置。因此,计时器不需要勾选“按小时”或任何其他定期间隔(如1:15, 1:30, 1:45)。用户可能会在我们刚刚检查 2 分钟后触发刷新,所以如果我们每 15 分钟检查一次,我们可能会得到类似的结果:(1:15, 1:30, 1:32, 1:47用户手动刷新在1:32,所以我们重置计时器并在 15 分钟后自动刷新时间点)。

由于该间隔在我正在开发的系统中是标准的,因此我可以对它进行硬编码。此时不需要它是通用的间隔计时器(尽管欢迎本质上通用的解决方案)。

4

1 回答 1

1

据我了解,您需要计时器子系统完成以下活动
1. 以预定义的时间间隔自动触发系统刷新。
2.用户触发系统刷新,可以在任何情况下进行。
3.ticker监控上述情况并触发刷新的 A。

我在下面提供了一些建议——尽管可能无法完全回答您的所有疑问
1. 以上列出的三个任务可以被识别为 3 个不同线程的一部分。这将一起设置和取消事件。即任务 1 和 2 将设置一个事件,而任务 3 将取消设置和事件,这些事件是同一线程之间共享的。
2.现在对于点-1,即预定义的区间,解变得更加简单。对于每个间隔(即假设您已计划刷新 10 分钟、13 分钟等),从当前时间开始计算下一个差分时间,当它为零时,您可以设置事件。

当然,你可以通过建模等来提高抽象intervalEvent(s)但是根据我的经验,对于基于低级别精度的需求,例如计时器、调度等,我觉得一种C更合适的方法更合适。

于 2012-11-29T17:27:02.427 回答