Clojure代理:限速



好的,所以我在Clojure中有一个小型的程序SVG编辑器。

它有一个代码窗格,用户可以在其中创建生成 SVG 文档的代码,以及一个预览窗格。每当代码更改时,预览窗格都会更新。

现在,在

文本更改事件中,代码在 UI 线程 (Ewwwww!) 上重新编译,预览窗格已更新。编译步骤应该异步进行,代理似乎是这个问题的一个很好的答案:要求代理在更新时重新编译代码,并将结果传递给映像窗格。

我还没有使用代理,我不知道它们是否与隐式队列一起工作,但我怀疑是这样。就我而言,我对计算"中间"步骤没有兴趣(考虑快速击键:如果在重新编译开始之前发生击键,我只想放弃重新编译) - 即我想要一个send来覆盖任何挂起的代理计算。

我该如何做到这一点?有什么提示吗?甚至是代码示例?我的漫谈甚至有意义吗?

谢谢!

您描述的问题更多地涉及执行流控制而不是共享状态管理。因此,您可能希望暂时将 STM 分开并查看期货:它们仍然作为代理在线程池中执行,但可以通过调用 future-cancel 并使用 future-cancelled? 检查它们的状态来阻止它们,而不是代理。

没有强有力的保证可以有效地停止未来正在执行的线程。不过,您的代码将能够尝试取消未来,并继续安排下一次重新编译。

代理确实在队列上工作,因此每个函数获取代理的状态并生成代理的下一个状态。代理随时间推移跟踪身份。这听起来比你需要的多一点,原子更适合你的任务,并且以非常相似的方式使用。

相关内容

  • 没有找到相关文章

最新更新