justinhj <[email protected]> writes:
> On Dec 26, 11:42 pm, Alex Osborne <[email protected]> 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))))))
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en