¿Cuál es la forma idiomática de Clojure de crear un hilo que se repite haciendo actualizaciones a algunos refs compartidos y gestionar su duración? Me encuentro utilizando future
para esto, pero parece un poco complicado ya que nunca devuelvo un valor significativo. Ej .:Idiomatic Clojure forma de generar y gestionar subprocesos de fondo
(future (loop [] (do
(Thread/sleep 100)
(dosync (...))
(recur))))
Así mismo, tengo que tener cuidado de future-cancel
esto cuando el procesamiento en segundo plano ya no es necesaria. Cualquier consejo sobre cómo orquestar eso en una aplicación Clojure/Swing sería agradable. P.ej. un dummy JComponent
que se agrega a mi IU que es responsable de matar el hilo cuando la ventana está cerrada puede ser una idea.
Llamada 'futuro cancel' o la creación de una cantidad "cancele por favor" bandera a la misma cosa realmente. Todavía tengo que asegurarme de que suceda en el momento correcto y de manera robusta. (Extraño RAII) – pauldoo
Tus otros puntos sobre 'do' y' while' son por supuesto correctos. :) – pauldoo
No creo que dije que deberías establecer una bandera por favor-cancelar. Si su tarea en segundo plano se realizará después de, digamos, mil iteraciones o cuando la ventana se haya cerrado, el futuro puede rastrear esas cosas y apagarse. Algunas cosas son más complicadas y requieren una administración más detallada, y para aquellas que también podría usar el futuro cancelar. – amalloy