如何让定时器中断一个等待过程?

Posted

技术标签:

【中文标题】如何让定时器中断一个等待过程?【英文标题】:How to make a timer interrupt a waiting process? 【发布时间】:2012-01-18 05:50:58 【问题描述】:

我正在尝试在使用标准读取-评估-打印循环的程序中实现警报。

代码示例如下:

while True:
    input = get_input() # A function that waits for input and 
                        # returns the input once it is obtained
    set_alarm(interpret(input)) # A function that sets the alarm

Set_alarm 使用 threading.Timer 类。不过,这有一个问题。计时器按时激活,但当 get_input() 等待输入时,计时器将等待该过程完成,然后再产生所需的输出。

有没有办法让定时器的回调函数中断等待函数,并在它被激活后立即产生输出?

谢谢!

【问题讨论】:

【参考方案1】:

CPython checks for signals 在各个纯 Python 步骤之间。很可能 get_input() 拥有全局解释器锁,信号处理将延迟到 get_input 返回。

解决方案是使用非阻塞调用以尊重超时的方式征求用户输入。根据您的平台,您可以使用kbhit 或选择(使用标准输入)来获取用户输入。

【讨论】:

好的,谢谢!但是khbit只适用于按键输入,对吧?如果 get_input() 得到其他形式的输入,比如语音怎么办? @Jian:那么你需要找到某种非阻塞方式来确定是否有任何语音等待或已经处理。

以上是关于如何让定时器中断一个等待过程?的主要内容,如果未能解决你的问题,请参考以下文章

请问单片机定时器中断是怎么样的过程啊

如何避免计时器滴答中断主线程?

嵌入式软件设计(定时器中断)

关于定时器中断怎么理解?

51单片机定时器中断

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程