如何在不更改其值的情况下获取先前设置的警报的剩余时间?
How to get the time left of a previously set alarm without changing its value?
是否可以知道之前使用 alarm()
系统调用设置的警报还剩多少时间,但不更改其当前值?
如果可能的话,我怎样才能得到这个?
很遗憾,没有。
像 timer_gettime
permit this kind of interrogation of pending alarms, but the venerable alarm()
调用这样的现代替代方法没有。
您可以按照 post 中的建议清除并重新设置 alarm()
,或者,如果您自己设置 alarm()
,您当然可以计算并记住预期到期时间。 (注意:alarm()
调用只有一秒的精度。)
您可以通过调用 alarm(0) 并查看 return 值来获取剩余秒数。但是,这不符合您不更改当前值的要求,因为调用 alarm(0) 会取消任何未决警报。您可以再次调用警报,传递您刚刚读取的剩余秒数,这将重置警报。问题是它不是很精确,并且不会完全模仿原始警报呼叫的行为,因为时间分辨率只有一秒。如果您这样做,您的时间可能会偏差将近整整一秒,但也许没关系。
从你的问题来看,你可能已经考虑过所有这些问题,并且像我一样阅读了手册页。我仍然没有找到您问题的确切答案,但我想提出我的不准确答案,以防对您来说足够好。
是否可以知道之前使用 alarm()
系统调用设置的警报还剩多少时间,但不更改其当前值?
如果可能的话,我怎样才能得到这个?
很遗憾,没有。
像 timer_gettime
permit this kind of interrogation of pending alarms, but the venerable alarm()
调用这样的现代替代方法没有。
您可以按照 post 中的建议清除并重新设置 alarm()
,或者,如果您自己设置 alarm()
,您当然可以计算并记住预期到期时间。 (注意:alarm()
调用只有一秒的精度。)
您可以通过调用 alarm(0) 并查看 return 值来获取剩余秒数。但是,这不符合您不更改当前值的要求,因为调用 alarm(0) 会取消任何未决警报。您可以再次调用警报,传递您刚刚读取的剩余秒数,这将重置警报。问题是它不是很精确,并且不会完全模仿原始警报呼叫的行为,因为时间分辨率只有一秒。如果您这样做,您的时间可能会偏差将近整整一秒,但也许没关系。
从你的问题来看,你可能已经考虑过所有这些问题,并且像我一样阅读了手册页。我仍然没有找到您问题的确切答案,但我想提出我的不准确答案,以防对您来说足够好。