2013-03-07 5 views

答えて

6

また、私は私が始めたタイマーを殺したかった同様の状況、出くわした:それは私のタイマーではなかったと言ったので

(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

もう1つの解決方法:あなたが運が悪い時に実際にタイマーをキャンセルできない場合は、ですから、nilmy-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に戻すだけで、後でタイマーを再び有効にすることができます。

関連する問題