Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重新启动时处理剩余天数的逻辑_C++_Linux_Timer_Reboot - Fatal编程技术网

C++ 重新启动时处理剩余天数的逻辑

C++ 重新启动时处理剩余天数的逻辑,c++,linux,timer,reboot,C++,Linux,Timer,Reboot,有一个计时器,它每24小时调用一个函数。此函数读取文件以获取剩余天数,将其递减1,并将新的剩余天数写回同一文件 问题:如果系统重新启动,计时器(等待在24小时后触发)可能不会被调用,也不会写入文件。例如,如果每天都在24小时之前重新启动,那么剩余的天数将永远不会减少 我在Linux系统上使用C++程序。 处理此问题所需的逻辑是什么。IMHO,最好的方法是存储另一个事件上次发生的日期,并在dayly函数中比较每个事件。或者直接存储新日期(旧日期+X天),也可以直接测试。这样,如果您在启动时也进行了

有一个计时器,它每24小时调用一个函数。此函数读取文件以获取剩余天数,将其递减1,并将新的剩余天数写回同一文件

问题:如果系统重新启动,计时器(等待在24小时后触发)可能不会被调用,也不会写入文件。例如,如果每天都在24小时之前重新启动,那么剩余的天数将永远不会减少

我在Linux系统上使用C++程序。
处理此问题所需的逻辑是什么。

IMHO,最好的方法是存储另一个事件上次发生的日期,并在dayly函数中比较每个事件。或者直接存储新日期(旧日期+X天),也可以直接测试。这样,如果您在启动时也进行了测试,您将不会重新启动


如果您必须继续处理剩余的天数,您可以检查文件的最后修改时间。删除天数的一个好提示是(last_time-current_time+12小时)/24小时的值。它应该接受几天不激活,甚至在几个小时内多次激活。但是,对于该文件的手动操作,包括重大事件后的恢复,您应该非常谨慎,并确保该文件的内容与其修改时间一致。龙躺在那里……

你为什么要数剩下的日子(直到?)?你不能只存储日期X吗?@AndreyTurkin这是用来跟踪另一个事件发生之前的天数。该事件应在“X”天之前发生。这个“X”天将在一个文件中初始化。我同意@AndreyTurkin的观点,存储结束日期并根据它计算剩余天数将是一个更健壮的系统,并且可以避免这种情况issue@vu1p3n0x:如果用户修改系统时间,这不会打乱计算吗?是的,但是如果你考虑到一个用户操纵系统,那么所有的赌注都没有了。他们可以让服务器关闭几天,或者简单地修改保存这些天的文件。第二段似乎是我应该采取的方式。但是,如果系统时间被修改了,这能起作用吗?@nitin_cherian:如果系统时间被调整了,即使调整了几分钟,甚至一个小时,如果你用这种方式管理DST,也应该没问题。但是,如果出现错误,并且系统时间缩短了几天或几年,任何事情都可能发生。作为一种安全措施,如果增量大于5天或10天,函数应中止并显示错误消息,如果与1天不同,则记录警告。在不知道上下文的情况下给出“安全”建议是危险的。我们不能假设OP没有为核废料仓库或医疗设备编写代码。“带错误信息的中止”当然不总是一个故障安全选项。@sehe:其基本原理是找到一种方法来提醒真正的人,有些事情很奇怪,需要手动操作。手动操作是在几分钟内发生还是在几天内发生,以及实际操作是中止还是其他故障安全默认值实际上取决于上下文。但是IMHO,试图建立一个能够处理错误系统日期的自动算法是没有希望的…@sehe:但是你是对的,安全不是正确的词,只是我在英语中能找到的更接近。我指的是一种保护系统不受不必要/不受控制的自动操作影响的方法。如果你能给我一个更好的词,我会编辑这篇文章