2014-11-27 24 views
5

Yeni ileti dizilerini kapatan bir sunucu yazdım. Bu iş parçacıklarının bir kısmı standart çıktıya yazmak zorundadır, ancak yaptıkları zaman terminalde hiçbir şey görünmez.SBCL çoklu dişler standart çıktıya yazılır

sbcl'de ana ileti dizisine mesaj göndermeme izin veren bir tür mesajlaşma api var mı?

Çok teşekkürler!

cevap

10

Geçerli olan *standard-output*'u yeni iş parçacığına bir şekilde iletmeniz gerekir, daha sonra bu iş parçacığı işlevinde *standard-output* değerini bu değere bağlayabilirsiniz.

Geçerli Genel Lisp uygulamaları, thread yerel dinamik bağlamaları ve SBCL is one of them'u oluşturur. Ben iplik işlevin argümanı *standard-output* adlı olabilirdi ve dinamik fonksiyon girişinde yapıldı bağlanma beri sonra, let gerek olmazdı

(sb-thread:make-thread ;; thread function 
         #'(lambda (standard-output) 
          ;; thread-local dynamic binding of special variable 
          (let ((*standard-output* standard-output)) 
          ...)) 
         ;; thread function argument, provided by the current thread 
         :arguments (list *standard-output*)) 

Not. Ancak, dinamik değişkenlerin, özel değişken adlandırma kuralı etrafında bulunan kulaklıklara rağmen, açık ve açık olması gerektiğini düşünüyorum.