2014-11-27 6 views
5

को लिखने मैं एक सर्वर है कि नई धागे बंद spins लिखा था। उन धागे से कुछ मानक-उत्पादन के लिए लिखने की ज़रूरत है, लेकिन जब वे करते हैं, कुछ भी नहीं टर्मिनल में दिखाई देता है।SBCL से अधिक थ्रेड मानक उत्पादन

वहाँ SBCL में संदेश सेवा API किसी प्रकार की है कि मुझे मुख्य थ्रेड के लिए वापस संदेश भेजने के लिए अनुमति देता है है? ज्यादा

धन्यवाद!

उत्तर

10

आप आपको लगता है कि मूल्य को *standard-output* बाध्य कर सकते हैं किसी भी तरह नया थ्रेड के लिए वर्तमान *standard-output* पारित करने के लिए है, तो उस धागे के समारोह में की जरूरत है,।

वर्तमान कॉमन लिस्प कार्यान्वयन धागे की स्थानीय गतिशील बाइंडिंग, और SBCL is one of them

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

ध्यान दें कि मैं धागा समारोह के तर्क *standard-output* नामित किया जा सकता था और फिर मैं let की जरूरत नहीं होगी, बंधन के बाद से गतिशील समारोह प्रवेश के समय किया गया था। लेकिन मुझे लगता है कि गतिशील बाइंडिंग, स्पष्ट और स्पष्ट होना चाहिए विशेष चर नामकरण परंपरा के आसपास इयर मफ के होते हुए भी।

संबंधित मुद्दे