私はこのようなrun-with-idle-timer
にlambda()
機能を追加しました:run-with-idle-timerから関数を削除するにはどうすればよいですか?
(run-with-idle-timer my-configurable-idle-time t
(lambda()
;;; do something
))
は、アイドルタイマーのトリガーから再び後の時点で、この機能を削除することが可能ですか?
私はこのようなrun-with-idle-timer
にlambda()
機能を追加しました:run-with-idle-timerから関数を削除するにはどうすればよいですか?
(run-with-idle-timer my-configurable-idle-time t
(lambda()
;;; do something
))
は、アイドルタイマーのトリガーから再び後の時点で、この機能を削除することが可能ですか?
はい、run-with-idle-timer
はcancel-timer
に渡すことができるtimer
オブジェクトを返します。
timer
オブジェクトを守らなかった場合は、timer-idle-list
を手動で変更できます。
Getting a list of running Emacs timersも参照してください。
また、私は私が始めたタイマーを殺したかった同様の状況、出くわした:それは私のタイマーではなかったと言ったので
(setq my-timer (run-with-timer 5 5 'my-func))
はしかし、
(cancel-timer my-timer)
は働いていませんでしたなぜこのようなことが起きたのか分かりません。最初のポスターの方法に加えて
、で殺さすることができます。
(cancel-function-timers 'my-func)
これは、関数「私の-FUNCを呼び出すすべてのタイマーをキャンセルします。私もテストされ、タイマー・リストを変更することによって、それを殺すために
、私は次のようでした:
明らか(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
を、このリスト構造は異なりますので、あなたはそれに応じて調整する必要があります。代替「タイマアイドルリスト」あなたは(実行してアイドルタイマー)
であなたのタイマーを開始した場合は、「gamegrid・スタート・タイマーと」gamegrid-殺すタイマーを使用して、タイマーを開始した場合にも動作するはずです'gamegrid-start-timerは基本的に' run-with-timer 'のラッパーですので、動作しません。
もう1つの解決方法:あなたが運が悪い時に実際にタイマーをキャンセルできない場合は、ですから、nil
にmy-timer-enabler
を設定することで、タイマーを無効にすることができ
(defvar my-timer-enabler t)
(run-with-idle-timer my-configurable-idle-time t
(lambda()
(when my-timer-enabler
;;; do something
)))
を使用しています。また、varをt
に戻すだけで、後でタイマーを再び有効にすることができます。