[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
make-thread with lambda form instead of function symbol
From: |
Eric Abrahamsen |
Subject: |
make-thread with lambda form instead of function symbol |
Date: |
Sun, 16 Apr 2017 09:05:27 -0700 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) |
Okay, one more thread question...
I'm trying to do something that seems like it would be a normal use
case: spawn a series of threads which call the same function using
different external processes. Practically what this means is that I want
to pass a function-plus-argument form to make-thread, not a function
symbol. Something like:
(let* ((results)
(sources '(source1 source2))
(threads
(mapcar
(lambda (s)
(make-thread
(funcall
(lambda ()
(push (get-stuff-from-source s) results)))))
sources)))
(mapc #'thread-join threads)
results)
The (funcall (lambda () thing was the only way I could get anything but
nil out of the thread functions. I think I'm fooling myself, though: so
far as I can tell, `get-stuff-from-source' is fully evaluated before the
thread is made, and nothing at all happens during the #'thread-join
loop.
Is it possible to give make-thread anything but a function symbol? The
only other thing I could think of was looping over the sources and
making ad-hoc symbols:
(fset (make-symbol (format "%s-dummy-function" (source-name source)))
(lambda () (push (get-stuff-from-source source) results)))
That seems ugly, but perhaps not that bad.
Thanks in advance,
Eric