2010-03-30 13 views
11

Je travaille sur un client MUD écrit en Clojure. En ce moment, j'ai besoin de deux threads différents. Celui qui reçoit l'entrée de l'utilisateur et l'envoie au MUD (via un simple Socket), et celui qui lit et affiche la sortie du MUD, à l'utilisateur.Clojure meilleure façon de réaliser plusieurs threads?

Dois-je simplement utiliser des threads Java ou y a-t-il une fonctionnalité spécifique à Clojure à laquelle je devrais me tourner?

+0

http://clojure.org/concurrent_programming est utile –

+4

"Dans tous les cas, Clojure fait ne remplace pas le système de threads Java, il fonctionne plutôt avec. Les fonctions de Clojure sont java.util.concurrent.Callable, donc elles fonctionnent avec le framework Executor etc ... " –

Répondre

8

Je recommande d'utiliser la fonction de pcalls, comme ceci:

(defn- process-server-responses [] 
    (prn "server connected") 
    (. java.lang.Thread sleep 1000) 
    (prn "server disconnected")) 

(defn- process-client-input [] 
    (prn "client-input start") 
    (. java.lang.Thread sleep 1000) 
    (prn "client-input stop")) 

(pcalls process-server-responses process-client-input) 

sortie au-dessus:

"server connected" 
"client-input start" 
"server disconnected" 
"client-input stop" 

Docs pour pcalls ici:

http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/pcalls

+0

Désolé ... Je suis boiteux, je viens de vous lire que vous écrivez un client MUD, pas un serveur MUD –

+0

J'ai mis à jour ma réponse à moi plus applicable à votre question :) –

+0

Merci beaucoup! –