Josue,看看java计时器
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Timer.html
Clojure也有很多方法可以实现:使用future、agents或core.async。
将其放入clojure.core将引入不必要的复杂性和维护成本。
还有一些设计选择,例如,它将在线程池上运行?它将等待任务终止后再开始计时?它可以阻塞吗?
根据您选择哪一套选项,将使将此功能移植到其他(future)平台变得更加困难:javascript不支持阻塞,Arduino没有系统时钟...
所以请随意创建自己的josue.timer
API或使用一些现成的
以下是一个使用java计时器的代码示例
(let [every-5-sec (java.time.Duration/parse "PT5S")
ok-task (proxy [java.util.TimerTask] []
(run []
(prn :ok)))
;; save this return for later
timer-task (doto (java.util.Timer.)
(.schedule ok-task
(.toMillis every-5-sec)
(.toMillis every-5-sec)))]
#_(.cancel ok-task)
#_(.cancel timer-task)
timer-task)