Sometimes the obvious is too obvious - call timed-agent and then
Thread/sleep while the timer of known duration runs. One further
question however, is there any significant difference between calling
the timed-agent worker function in send-off or in add-watch? For my
needs, the task that runs does not depend on the value of the agent -
the agent is just a convenient way to limit the timer.

On Nov 1, 4:29 pm, AndyK <andy.kri...@gmail.com> wrote:
> After a bit more digging - Timer is a background thread so clearly
> that's not going to mesh well as a foreground blocking activity with
> agent (which is what I get for plugging along one path and trying to
> bring in another path without thinking things through). But the
> question remains - any ideas for using Timer while blocking the
> current thread? Is a future a better choice here?
>
> On Nov 1, 4:19 pm, AndyK <andy.kri...@gmail.com> wrote:
>
>
>
>
>
>
>
> > I would like to block the thread until an agent has done its thing -
> > in this case serving as a cap on a timer. I had thought that wrapping
> > a call to the timed-agent function with await would do just that, but
> > apparently not. At least in the repl, the function returns immediately
> > and you can follow along as the agent updates until it's finished.
>
> > (defn timed-agent [limit f]
> >   (let [a (agent 0)
> >         t (java.util.Timer.)
> >         tt (proxy [java.util.TimerTask] [] (run [] (send-off a (fn[v]
> > (f) (inc v)))))]
> >     (set-validator! a #(> limit %))
> >     (.scheduleAtFixedRate t tt 1000 1000)
> >     a))
>
> > For example
> > user> (await (timed-agent 20 #(println "running")))
> > nil
> > user>
> > (returns immediately and 20 "running" strings will be printed)
>
> > user> (def a (timed-agent 20 #(println "running")))
> > #'user/a
> > user> @a
> > <whatever the value of a is at the time>
>
> > Clearly I'm misunderstanding await + agents (not surprising - clojure
> > is fairly new to me). Can someone clarify how await works and how one
> > should block a thread for a timed task where you want a limit to the
> > number of times it runs?
>
> > thank you

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to