Common Lisp Timer
Asked Answered
E

5

12

I would like to start a timer in my common lisp application that after a certain amount of time it will call a certain method. What would be the best way to accomplish this?

Eldredge answered 31/12, 2009 at 19:33 Comment(0)
H
6

Would something as simple as SLEEP work?

Hamartia answered 31/12, 2009 at 20:55 Comment(0)
A
5

With SBCL: make-timer and schedule-timer

SBCL has built-in functions for this.

SBCL supports a system-wide event scheduler implemented on top of setitimer that also works with threads but does not require a separate scheduler thread.

This examples executes a function after 2 seconds:

(schedule-timer (make-timer (lambda ()
                              (write-line "Hello, world")
                              (force-output)))
                2)

Among other methods we have unschedule-timer and list-all-timers.

Xach Bean's timer dates from 2003. It is possible these SBCL methods are more recent.

With Clerk, "a cron-like scheduler with a sane DSL"

With the Clerk library, we can run regular jobs:

(job "Say 'Hi' all the time" every 5.seconds (print "Hi"))

This will run every 5 seconds. Without "every" it would be a one-time job:

(job "Extraordinary event" in 5.days (send-mail "Don't forget X"))

where we can use any word instead of "in".

See also

I also encountered but didn't try https://github.com/Shinmera/simple-tasks

Anatomical answered 5/2, 2020 at 10:47 Comment(0)
S
4

http://www.cliki.net/TIMER implements relative time based scheduling, which i THINK is what you mean

Sheldonshelduck answered 31/12, 2009 at 19:54 Comment(2)
Just a note that this points to Xach's link as in jkndrkn's answer.Quarter
@FrankShearar And for whatever reason, this answer (which was posted two minutes earlier) has one fewer votes. Maybe people appreciate the formatting and attribution in the other answer.Quag
T
4

It's SBCL-dependent, but you might want to try out Zach Beane's TIMER.

Tevet answered 31/12, 2009 at 19:56 Comment(0)
D
1

You could use CL's SLEEP, unless you need more precise timing (since SLEEP is permitted to use approximate timing.)

In LispWorks, if more precise timing is needed, one could use LispWorks' timer scheduling interface.

Note that, same as Zach Beane's TIMER, this is not implementation-agnostic.

Devine answered 5/2, 2020 at 9:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.