Стоит обратить внимание на исходный код Overtone , в частности код для планирования событий в определенное время .
Это система синтеза музыки, поэтому вы должны надеяться, что у них правильный код синхронизации !!
Кроме того, они услужливо разделили временной код в отдельный проект ( overtone / at-at ), чтобы вы могли легко импортировать его, если хотите. Это обеспечивает хорошую оболочку Clojure для базовых библиотек Java (т. Е. ScheduledThreadPoolExecutor и друзья). Синтаксис такой:
;; run some-function every 500ms
(every 500 some-function)
Вы также можете планировать события в определенное время:
;; run some-other-function 10 seconds from now
(at (+ 10000 (now)) some-other-function)