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: "(start)" を "game" に置き換えたり、サンク/無意識にスタート/ストップをさまざまな組み合わせで試してみました。