【问题标题】:Timers In C#, when the timer start ticking?定时器 在 C# 中,定时器何时开始计时?
【发布时间】:2010-10-28 16:17:12
【问题描述】:

我的问题是计时器何时开始计时。

让我们以配置为每秒计时的计时器为例,我在hh:mm:ss:ms = 22:40:34.50 上启动我的程序。滴答声将在第二轮开始?从17:40:35.00 开始还是在确切的时间开始?所以第一个刻度将在17:40:35.50 上,下一个在17:40:36.50 上。

实际上我要解决的是我想让函数每天都在05:00:00.00 AM 上工作,但只运行一次。我已经建立了一个工作时间系统,有时工人忘记“关闭”他们的班次,所以我想在早上 5 点检查谁没有关闭,并对此出错。你觉得我怎么能解决问题?

【问题讨论】:

标签: c# timer


【解决方案1】:

Windows 不是实时的,这意味着像“每秒”这样的东西将是近似值。我很确定,甚至不能保证,例如,一秒计时器每分钟准确触发 60 次,或者每小时准确触发 3600 次。

如果您需要在早上 5:00 执行特定任务,最好的办法是安排在早上 5:00 运行的计划任务,或者每隔几秒轮询一次时间并在 5:00 运行一次的服务我过去了。

【讨论】:

  • +1 用于计划任务。令人惊讶的是,有多少人想要对操作系统内置的功能进行编程
  • 是的,我可以这样做,但我正在尝试减少连接到数据库的程序以使其更安全。这只是我想运行的一个简单功能.. 现在它每 500 毫秒工作一次,但也许我可以让它每秒钟滴答一次,并确保它总是在凌晨 5 点...明白了吗?
  • @Mazki516 - 计划任务是要走的路。 Windows 将在早上 5:00 启动它,它只会在运行时连接到数据库。
  • 或者,如果真的很担心,请使用数据库中安排的作业以避免额外的应用程序。
  • @ChrisF - 实际上不,它也可能从 5:00:01 开始。任务计划程序也不保证时间的重击。 Windows 中什么都没有。
【解决方案2】:

只要您调用 Start 方法,计时器就会启动。它不会等待一秒钟。计时器不能保证滴答之间的准确时间。如果你给它一个 1 秒的间隔,它将确保自最后一次滴答以来至少经过一秒。您可以以类似的方式解决您的问题,并在早上 5 点后第一次计时器时间结束时每天执行一次早上 5 点的工作。或者,如果您确信维护系统的人会知道计划任务 Aric TenEyck 建议使用计划任务是解决您问题的好方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2014-10-19
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多