我只找到了如何杀死我分配给变量的线程:
(setf *foo* (bt:make-thread (lambda () (loop)) :name "Foo2"))
- > (bt:destroy-thread *foo*)
我怎样才能杀死(bt:all-threads)
所见到的任何线程:
(bt:make-thread (lambda () (loop)) :name "Foo")
- > ?
答案 0 :(得分:7)
(bt:destroy-thread (nth index (bt:all-threads)))
检查线程是否存活可能是好的,(bt:thread-alive-p <thread>)
而不是当前线程,(bt:current-thread <thread>)
在杀死之前...
答案 1 :(得分:7)
你可以杀死任何线程。没什么特别的。如果你得到一个线程列表,只需获取你要杀死的线程并将其传递给函数。
函数destroy-thread
没有看到变量。由于它是一个函数,Lisp使用通常的评估规则。它传递了一个线程。线程恰好是示例中变量的值。
它可能是函数调用的值:
(defun my-thread ()
*foo*)
(bt:destroy-thread (my-thread))
甚至是数据结构的一部分,例如列表:
(defun my-thread ()
(list 1 *foo* 3))
(bt:destroy-thread (second (my-thread)))
线程只是另一个对象。
如果获得线程列表,则需要识别正确的线程。例如,通过查看线程的名称。