我正在寻找一种在Clojure中定期调用函数的简单方法.
JavaScript setInterval有我想要的那种API.如果我在Clojure中重新构想它,它看起来像这样:
(def job (set-interval my-callback 1000))
; some time later...
(clear-interval job)
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我不介意这是创建一个新线程,在线程池或其他东西中运行.时机也是准确的并不重要.事实上,提供的时间段(以毫秒为单位)可能只是一个呼叫结束和下一个呼叫开始之间的延迟.
我正在寻找任何可以在给定时间触发事件的方法,
例如:我希望特定的流程在上午9:30开始,然后我可以触发另一个流程,半小时后开始运行等.
提前致谢!
感谢@亚瑟- ulfeoldt和@未知的人谁也使用建议https://github.com/samaaron/at-at删除他的答案之前.文档有点过时,但这是我的方式.
(use 'overtone.at-at) (def my-pool (mk-pool)) ;=> make a thread pool (every 1000 #(println "I am super cool!") my-pool :initial-delay 2000) ;=> starts print function every 1 sec after a 2 sec delay (stop *1) ;=> stops it
所以为了让它从正好9开始,间隔半小时,我会做:
(require '[clj-time.core :as t])
(require '[clj-time.coerce :as c])
(use 'overtone.at-at)
;Make Thread Pool
(def my-pool (mk-pool))
(def current-time (t/now))
(def current-date (t/date-time
(t/year current-time)
(t/month current-time)
(t/day current-time)))
(def next-9-oclock
(if (> 9 (t/hour …