我发现解决如何杀死 Racket 中的线程非常令人沮丧。
似乎它足够基本,以至于在任何指南或文档中都没有明确说明(有些东西似乎相关,但我不明白如何将其应用于我的情况,因为它没有为流程的工作方式提供心理模型) .
每次我尝试(kill-thread thread-name)时,它都会返回线程实际上是一个过程的错误。但是,启动同一个线程可以正常工作。
我究竟做错了什么?
这是我目前的(可怕的)代码,在进入或退出 Racket 之前,我从来没有过多地使用线程,所以这可能超出了恶心:
(define game
(lambda ()
(let loop ()
(sleep 2)
(printf "game running \n")
(loop))))
(define start (lambda () (thread game)))
(define stop (lambda () (with-handlers
([exn:fail?
(lambda (exn)
(displayln (string-append "Failed to kill main game thread. " (exn-message exn)))
#f)])
(kill-thread (start)))))
E:我尝试过用“游戏”替换“(开始)”,并尝试以各种组合的方式启动/停止。