【问题标题】:How to get the time left of a previously set alarm without changing its value?如何在不更改其值的情况下获取先前设置的警报的剩余时间?
【发布时间】:2019-05-21 23:19:49
【问题描述】:

是否可以知道之前使用alarm() 系统调用设置的警报还剩多少时间,但不更改其当前值? 如果可能的话,我怎样才能得到这个?

【问题讨论】:

  • 在 Linux 上,您可以阅读 /proc/timer_list 并查找包含 do_setitimer, yourprocessname/yourpid 的行。以下行类似于# expires at 2706742298201-2706742298201 nsecs [in 201647627253 to 201647627253 nsecs]

标签: c unix signals alarm


【解决方案1】:

很遗憾,没有。

timer_gettime 这样的现代替代方案允许对未决警报进行这种询问,但古老的alarm() 呼叫却不允许。

您可以按照帖子中的建议清除并重新设置alarm(),或者,如果您自己设置alarm(),您当然可以计算并记住预期的到期时间。 (注意:alarm() 调用只有一秒的精度。)

【讨论】:

    【解决方案2】:

    您可以通过调用 alarm(0) 并查看返回值来获取剩余秒数。这不符合您的要求,即它不会更改当前值,因为调用 alarm(0) 会取消任何待处理的警报。您可以再次调用警报,传递您刚刚阅读的剩余秒数,这将重置警报。问题是它不是很精确,并且不能完全模仿原始警报呼叫的行为,因为时间分辨率只有一秒。如果你这样做,你的时间可能会差将近一秒钟,但也许没关系。

    从您的问题看来,您可能已经考虑过所有这些问题,并且像我一样阅读了手册页。我还没有找到你的问题的确切答案,但我想提出我的不准确答案,以防万一这对你来说足够好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 2023-03-09
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      相关资源
      最近更新 更多