On Dec 27, 10:59 pm, Alex Osborne <a...@meshy.org> wrote: > justinhj <justi...@gmail.com> writes: > > On Dec 26, 11:42 pm, Alex Osborne <a...@meshy.org> wrote: > > (defn test-threads [n out] > > (dotimes [x n] > > (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand- > > int 5000))))))) > > Ah. The problem is here. You're calling that lambda in the main thread > and then passing the return value of sleeper-thread to (Thread.) (which > doesn't make much sense). > > Try this: > > (defn test-threads [n out] > (dotimes [x n] > (.start (Thread. #(sleeper-thread out x (+ 2000 (rand-int 5000))))))) > > Or even: > > (defn test-threads [n out] > (dotimes [x n] > (future (sleeper-thread out x (+ 2000 (rand-int 5000)))))) > > Or forgetting about passing the out argument around: > > (defn test-threads [n] > (dotimes [x n] > (let [out *out*] > (future > (binding [*out* out] > (sleeper-thread x (+ 2000 (rand-int 5000)))))) > > You could turn that into a macro: > > (defmacro future-with-out [& body] > `(let [out# *out*] > (future (binding [*out* out#] ~...@body))) > > And then use it like: > > (defn test-threads [n] > (dotimes [x n] > (future-with-out (sleeper-thread x (+ 2000 (rand-int 5000))))))
Thanks Alex, I'm still struggling a bit with the different syntax between Clojure and Common Lisp, but I made your first change and it works now. Justin -- 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