gpt4 book ai didi

multithreading - 生成和管理后台线程的惯用 Clojure 方式

转载 作者:行者123 更新时间:2023-12-03 20:52:53 24 4
gpt4 key购买 nike

什么是 Clojure 惯用的方法来创建一个线程,该线程在后台循环更新某些共享引用并管理其生命周期?我发现自己在使用 future为此,但感觉有点像黑客,因为我从不返回有意义的值。例如。:

(future (loop [] (do
(Thread/sleep 100)
(dosync (...))
(recur))))

另外,我要小心 future-cancel当不再需要后台处理时。关于如何在 Clojure/Swing 应用程序中进行编排的任何提示都会很好。例如。一个假人 JComponent添加到我的 UI 中负责在窗口关闭时终止线程可能是一个想法。

最佳答案

您不需要 do在你的循环中;这是暗示。此外,虽然无条件循环重复没有任何问题,但您也可以使用 (while true ...)。
future是一个很好的工具;不要因为永远得不到返回而烦恼。但是,如果您使用代理而不是 future ,那真的会困扰您 - 没有值(value)观的代理是疯狂的。

然而,谁说你需要future-cancel ?只需让您将来的步骤之一是检查它是否仍然需要。那么你的代码的其他部分就不需要跟踪 future 并决定何时取消它们。所以像

(future (loop []
(Thread/sleep 100)
(when (dosync
(alter some-value some-function))
(recur)) ; quit if alter returns nil
))

将是一个可行的方法。

关于multithreading - 生成和管理后台线程的惯用 Clojure 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com