The following seems to do it;
(defmacro with-thread [nm & body]
`(let [thread# (Thread. (fn [] (do ~...@body)))]
(if ~nm (.setName thread# ~nm))
(.start thread#)
thread#))
(with-thread "foo" (println "HasdfasdfasdfasdfasdfasdfasdfasdfI"))
#<Thread Thread[foo,5,main]>
user=> HasdfasdfasdfasdfasdfasdfasdfasdfI
Also, macroexpand-1 really helps when writing macros. You can see
exactly how it's being expanded and it's then somewhat easier to
debug;
(macroexpand-1 '(with-thread nil (println "HasdfasdfasdfasdfasdfasdfasdfasdfI"))
(clojure.core/let [thread__112__auto__ (java.lang.Thread.
(clojure.core/fn [] (do (println
"HasdfasdfasdfasdfasdfasdfasdfasdfI"))))] (if nil (.setName
thread__112__auto__ nil)) (.start thread__112__auto__)
thread__112__auto__)
Regards, Adrian.
On Mon, Oct 19, 2009 at 6:39 AM, Gorsal <[email protected]> wrote:
>
> So now that the future is working, I'm attempting to print from an
> actual java thread. Like this
>
> (defmacro with-thread [nm & body]
> `(let [thread# (Thread. #(fn [] (do ~...@body)))]
> ~@(if nm `((.setName thread# ~nm)))
> (.start thread#)
> thread#))
>
> (with-thread nil (println "HasdfasdfasdfasdfasdfasdfasdfasdfI"))
>
> Except no output! Eeek!!! What am i doing wrong?
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---