2017-04-04 59 views
0

有一个定时器每24小时调用一次函数。该函数读取一个文件以获得剩余天数,将其减1并将新的剩余天数写回到同一文件。用于处理重启时的剩余日期的逻辑

问题:如果系统重新启动,定时器(等待在24小时标记处触发)可能不会被调用,写入文件也不会发生。例如,如果在24小时之前每天都有重新启动,则剩余的日期将永远不会减少。

我在Linux系统上使用C++程序。

处理这个问题需要什么逻辑。

+2

为什么你需要计算剩余天数(直到?)呢?你不能只存储日期X? –

+0

@AndreyTurkin这用于跟踪直到另一个事件发生的天数。直到说'X'日已过,事件就不会发生。这'X'日将在文件中初始化。 –

+0

我同意@AndreyTurkin的存储结束日期和计算剩余天数的基础上,这将是一个更强大的系统,并会避免此问题 – vu1p3n0x

回答

0

恕我直言,最好的方法是存储其他事件最后发生的日期,并比较每天的功能。或者直接存储新日期(旧日期+ X天)并直接进行测试。这样,如果您在启动时进行测试,那么您将无法重新启动。

作为替代方案,如果您必须继续处理剩余天数,则可以检查文件的上次修改时间。对于要移除的天数,一个很好的提示是(last_time - current_time + 12小时)/ 24小时的值。它应该在几个小时内接受几天而不激活甚至几次激活。但是,您应该对该文件的手动操作非常谨慎,包括重大事件后的恢复,以及确保文件的内容与其修改时间一致。 DRAGONS LIE ...

+0

第二段似乎是我应该采取的方式。但是,如果系统时间被修改,这是否工作? –

+0

@nitin_cherian:如果系统时间刚刚调整,即使是几分钟甚至一个整小时,如果您要以这种方式管理DST,它应该仍然可以。但是,如果出现错误并且系统时间在几天或几年内发生任何事情,都可能发生。作为一种安全措施,如果增量大于5或10天,函数应该中止并显示错误消息,并且如果与1天不同则会记录警告。 –

+1

在不知情的情况下提供“安全”建议是危险的。我们不能假定OP没有为核废料仓库或医疗设备编写代码。 “中止并显示错误消息”当然不总是一个安全防护选项。 – sehe