diff options
Diffstat (limited to 'src/scheduled_agent.clj')
| -rw-r--r-- | src/scheduled_agent.clj | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/scheduled_agent.clj b/src/scheduled_agent.clj index 2d1588f..d2e1454 100644 --- a/src/scheduled_agent.clj +++ b/src/scheduled_agent.clj @@ -1,8 +1,10 @@ -(ns scheduled-agent ++(ns scheduled-agent (:import java.util.concurrent.Executors java.util.concurrent.TimeUnit) (:use clojure.stacktrace)) +; This is starting to get less agent-like + (defn- runnable-proxy [f] (proxy [Runnable] [] (run [] (f)))) @@ -15,12 +17,12 @@ (let [val (func)] (dosync (ref-set data val))) (catch Exception e - (print-stack-trace e 5))))) - future (.scheduleWithFixedDelay pool pfunc 0 period TimeUnit/SECONDS)] + (print-stack-trace e 5)))))] {:pool pool :data data - :future future + :future (ref nil) :func func + :pfunc pfunc :period period :init init})) @@ -28,9 +30,15 @@ "Return current contents of agent." @d) +(defn start! [{f :future pfunc :pfunc period :period pool :pool}] + (dosync + (if (nil? (ensure f)) + (ref-set f (.scheduleWithFixedDelay pool pfunc 0 period TimeUnit/SECONDS))))) + (defn cancel! [{f :future}] "Cancel automatic updating of agent data. Cannot be restarted." - (.cancel f false)) + (if @f + (.cancel @f false))) (defn update! [{func :func data :data}] "Synchronously update contents of agent." |
