【问题标题】:Variable Interval Timer可变间隔定时器
【发布时间】:2012-11-28 16:59:15
【问题描述】:

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

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

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

额外细节:

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

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

【问题讨论】:

    标签: .net algorithm timer


    【解决方案1】:

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

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

    当然,你可以通过对interval,Event(s)等建模来改进抽象。但是根据我的经验,对于定时器、调度等低级精度的需求,我觉得更C 种方法更合适。

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 2021-07-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 2018-06-09
      相关资源
      最近更新 更多