2014-11-27 2 views
5

새 스레드를 돌리는 서버를 작성했습니다. 이러한 쓰레드 중 일부는 표준 출력에 쓰여야하지만, 그렇게하면 터미널에 아무것도 나타나지 않습니다.SBCL 여러 스레드가 표준 출력에 쓰기

sbcl에 메인 스레드로 메시지를 다시 보낼 수있는 메시징 API가 있습니까?

감사합니다.

답변

10

어쨌든 현재 *standard-output*을 새 스레드로 전달해야합니다. 그런 다음 해당 스레드 함수에서 *standard-output*을 해당 값에 바인딩 할 수 있습니다.

현재 Common Lisp 구현은 스레드 로컬 동적 바인딩을 만들고 SBCL is one of them입니다. 내가 스레드 함수의 인수 *standard-output*라는 이름의 수도 및 동적이 기능 항목에서 수행 된 바인딩 때문에 그때는 let 필요하지 않을

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

참고. 하지만 특수 변수 명명 규칙을 둘러싼 귀 덮개에도 불구하고 동적 바인딩이 명확하고 분명해야한다고 생각합니다.

관련 문제