(index ("timer-period" 0) ("timer-epsilon" 187) ("timer-condition?" 384) ("make-timer-condition" 512) ("register-timer-task!" 620) ("cancel-timer-task!" 1456))
(def (sig (procedure "(timer-period . new) -> PERIOD" (id timer-period))) (p "Without argument queries the current period.  With argument chances the period at which timers are fired."))
(def (sig (procedure "(timer-epsilon . new) -> PERIOD" (id timer-epsilon))) (p "Without argument queries the current epsilon.  With argument chances the epsilon for grouping timers by due time."))
(def (sig (procedure "(timer-condition? obj) -> boolean" (id timer-condition?))) (p "Predicate to test for timer conditions."))
(def (sig (procedure "(make-timer-condition)" (id make-timer-condition))) (p "Creates a timer condition."))
(def (sig (procedure "(register-timer-task! time job) -> TASK" (id register-timer-task!))) (p "Registers " (tt "JOB") " to be run after " (tt "TIME") " has passed.  Returns a reference to the task.  The reference is opaque by definition - unlike srfi-120 " (tt "timer-schedule!") "'s task identifiers.  In fact it is a pair.") (p "The job is typically a thunk to be executed.  This thunk MUST NOT raise exceptions, MAY NOT block and SHOULD return ASAP.  So except for simple, fast operations it should schedule the actual operation, e.g. by starting a fresh thread, and return.") (p "If a thread is given as " (tt "JOB") ", it will receive a " (tt "timer-condition?") " via " (tt "thread-signal!") ".") (p "Undocumented: if a " (tt "pigeon-hole") " is given as " (tt "JOB") " a " (tt "timer-condition?") " is unconditionally queued."))
(def (sig (procedure "(cancel-timer-task! TASK) -> boolean" (id cancel-timer-task!))) (p "Cancels the TASK (must be a reference obtained from " (tt "register-timer-task!") ").  (In fact it atomically sets the cdr of the reference to " (tt "#f") " and returns the old value.)") (p "Returns " (tt "#f") " if the " (tt "TASK") " was already canceled or fired."))
