2010-03-30 18 views
11

Pracuję nad klientem MUD napisanym w Clojure. W tej chwili potrzebuję dwóch różnych wątków. Jeden, który odbiera dane wejściowe od użytkownika i wysyła go do MUD (za pomocą prostego gniazda), a także ten, który odczytuje i wyświetla dane wyjściowe z MUD-u do użytkownika.Clojure najlepszy sposób na uzyskanie wielu wątków?

Czy powinienem używać tylko wątków Java, czy jest tam jakaś funkcja specyficzna dla Clojure, do której powinienem się zwrócić?

+0

http://clojure.org/concurrent_programming jest pomocne –

+4

"We wszystkich przypadkach Clojure nie nie zastępuje systemu wątków Java, raczej działa z nim. Funkcje Clojure to java.util.concurrent.Callable, dlatego też działają w środowisku Executor itp. " –

Odpowiedz

8

Polecam przy użyciu funkcji pcalls, tak:

(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) 

wyjściowe dla powyższego:

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

Docs dla pcalls tutaj:

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

+0

Przepraszam ... jestem lame. Po prostu czytam, że piszesz klienta MUD, a nie serwer MUD. –

+0

Zaktualizowałem moja odpowiedź na mnie bardziej dotyczy twojego pytania :) –

+0

Dziękuję bardzo! –

Powiązane problemy