mys*_*eem 5 lisp sbcl common-lisp
我写了一个旋转新线程的服务器.其中一些线程需要写入标准输出,但是当它们执行时,终端中不会显示任何内容.
在sbcl中是否有某种类型的消息api允许我将消息发送回主线程?
非常感谢!
ace*_*ent 11
您需要以*standard-output*某种方式将当前传递给新线程,然后在该线程的函数中,您可以绑定*standard-output*到该值.
当前Common Lisp实现进行线程局部动态绑定,而SBCL就是其中之一.
(sb-thread:make-thread ;; thread function
#'(lambda (standard-output)
;; thread-local dynamic binding of special variable
(let ((*standard-output* standard-output))
...))
;; thread function argument, provided by the current thread
:arguments (list *standard-output*))
Run Code Online (Sandbox Code Playgroud)
请注意,我可以命名线程函数的参数*standard-output*然后我不需要let,因为动态绑定是在函数入口处完成的.但我认为动态绑定应该是明确和明显的,尽管围绕特殊变量命名约定的耳罩.
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |