Just an addendum to my last post - without the .start you can test it better;

(defmacro with-thread [nm & body]
 `(let [thread# (Thread. (fn [] (do ~...@body)))]
    (if ~nm (.setName thread# ~nm))
    ;(.start thread#)
    thread#))

(def th (with-thread "foo" (println "HasdfasdfasdfasdfasdfasdfasdfasdfI")))

(.start th)
nil
HasdfasdfasdfasdfasdfasdfasdfasdfI

(.getName th)
"foo"

- Adrian.

On Mon, Oct 19, 2009 at 7:18 AM, Adrian Cuthbertson
<adrian.cuthbert...@gmail.com> wrote:
> 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 <s...@tewebs.com> 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 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