为了账号安全,请及时绑定邮箱和手机立即绑定

时间为零的signal.setitimer,后跟signal.pause不起作用

时间为零的signal.setitimer,后跟signal.pause不起作用

四季花海 2022-06-14 17:11:11
我有以下代码,它按预期工作:import signaldef printer(signum, frame):    print("hi!")signal.signal(signal.SIGALRM, printer)signal.setitimer(signal.ITIMER_REAL, 0.1, 3.0)while(True):    signal.pause()我想使用signal.setitimer(signal.ITIMER_REAL, 0.0, 3.0),但要正确启动计时器需要稍等:signal.setitimer(signal.ITIMER_REAL, 0.1, 3.0). 这里发生了什么事?有没有办法立即启动计时器?(仅适用于 Linux)
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

的文档signal.setitimer说,如果secondsarg 为 0,这将清除计时器:


setitimer(which, seconds, interval=0.0, /)

    设置给定的计时器(ITIMER_REAL、ITIMER_VIRTUAL 或 ITIMER_PROF 之一)。


    计时器将在 value 秒后触发,之后每隔间隔秒触发一次。

    可以通过将秒数设置为零来清除计时器。


    将旧值作为元组返回:(延迟,间隔)。

这反映了底层 POSIX setitimer系统调用的行为:


将it_value设置为 0 将禁用计时器,无论it_interval的值如何。 

在 POSIX 系统上,it_value 是一个timeval 结构,其精度以微秒为单位。因此,如果您可以在计时器第一次触发之前容忍非常小的延迟,只需使用非常小的参数调用 setitimer,小到 1 微秒:


signal.setitimer(signal.ITIMER_REAL, 0.000001, 3.0)


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信