+It should be noted that writing timer functions requires special care,
+as the dynamic environment in which they run is unpredictable: dynamic
+variable bindings, locks held, etc, all depend on whatever code was
+running when the timer fired. The following example should serve as
+a cautionary tale:
+
+@lisp
+(defvar *foo* nil)
+
+(defun show-foo ()
+ (format t "~&foo=~S~%" *foo*)
+ (force-output t))
+
+(defun demo ()
+ (schedule-timer (make-timer #'show-foo) 0.5)
+ (schedule-timer (make-timer #'show-foo) 1.5)
+ (let ((*foo* t))
+ (sleep 1.0))
+ (let ((*foo* :surprise!))
+ (sleep 2.0)))
+@end lisp
+
+@section Timer Dictionary
+