我已将lambda()
函数添加到run-with-idle-timer
,如下所示:
(run-with-idle-timer my-configurable-idle-time t
(lambda ()
;;; do something
) )
以后可以从空闲计时器触发器中再次删除此功能吗?
答案 0 :(得分:13)
是的,run-with-idle-timer
会返回timer
个对象,您可以将其传递给cancel-timer
。
如果您没有保留timer
对象,可以手动修改timer-idle-list
。
答案 1 :(得分:7)
我也遇到了类似的情况,我想杀死我开始的计时器:
(setq my-timer (run-with-timer 5 5 'my-func))
然而,
(cancel-timer my-timer)
没有工作,因为它说我的计时器没有设置(不知道为什么会发生这种情况)。
除了第一张海报的方法外,还可以用以下方法杀死:
(cancel-function-timers 'my-func)
取消所有定时器调用函数' my-func。
通过改变我也测试过的timer-list来杀死它,我做了以下几点:
(length timer-list) ;; I had two timers..one good, one bad
(cdr timer-list) ;; I verified the last was the one I wanted to keep
(setq timer-list (cdr timer-list)) ;; I reset timer-list
显然,这个列表结构会有所不同,因此您必须相应地进行调整。替代"计时器 - 空闲列表"如果您使用(run-with-idle-timer)启动计时器
如果用gamegrid-start-timer启动你的计时器并且游戏杀戮计时器不起作用,这也应该有效,因为游戏的启动计时器基本上只是一个' run-with-timer
的包装器答案 2 :(得分:1)
还有一个解决方案:如果您运气不好并且无法实际取消计时器,您可以随时使用
(defvar my-timer-enabler t)
(run-with-idle-timer my-configurable-idle-time t
(lambda ()
(when my-timer-enabler
;;; do something
)))
因此,您可以将my-timer-enabler
设置为nil
来停用计时器。稍后您可以通过简单地将var设置回t
来重新启用计时器。