2010-12-10 13 views
7

इम TClientSocket या Indy के TIdTCPClient का उपयोग कर (परियोजना के आधार पर)थ्रेड्स समान क्लाइंट सॉकेट साझा कर सकते हैं?

मैं कुछ धागे प्रत्येक प्रसंस्करण आइटम नहीं हैं, और कभी कभी जुड़ा ग्राहक सॉकेट पर डेटा भेजने की जरूरत है। (डेटा पढ़ें फार्म सॉकेट प्रसंस्करण धागे में उपयोग नहीं होता)

मूल रूप से मेरे सवाल है ...

  • संभव है?
  • क्या यह "सुरक्षित" है?

या मैं

  • धागा प्रति एक ग्राहक सॉकेट या
  • होना चाहिए मार्शलिंग/महत्वपूर्ण वर्गों

डेल्फी-7 इंडी-9

+1

बीटीडब्ल्यू, इंडी 9 एक्स अप्रचलित –

+0

है, मुझे पता है, (थोड़े डेल्फी 7 मुझे भी लगता है) यह चीजों की "सूची" पर है;) –

उत्तर

4

एकाधिक धागे के कुछ थोड़े एक ही सॉकेट को पढ़ और लिख सकते हैं। प्रत्येक बार जब आप accept, यह लंबित कनेक्शन की कतार पर पहला कनेक्शन निकाल देगा, उसी सॉकेट गुणों के साथ एक नई सॉकेट बनाएं और उस सॉकेट के लिए एक नई फ़ाइल डिस्क्रिप्टर आवंटित करें।

तो प्रति स्वीकृत कनेक्शन केवल एक धागा।

यदि आप पूछ रहे हैं कि क्या आप एक स्वीकृत कनेक्शन पर एकाधिक लिख/पढ़ सकते हैं, तो आपको सुविधाओं को लॉक करने की आवश्यकता होगी, इसलिए समांतरता लाभों का नुकसान। यदि आप एक लंबी प्रक्रिया को थ्रेड करना चाहते हैं और फिर सॉकेट में परिणाम लिखना चाहते हैं, तो सही क्रम में लिखने के लिए सिंक्रनाइज़ेशन का उपयोग करें।

+0

इसके लिए धन्यवाद, यह भी पाया गया जिसने http: // tangentsoft.net/wskfaq/intermediate.html#threadsafety –

+0

इसके अलावा, 'स्वीकार करें' थ्रेड-सुरक्षित है :) –

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

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