कोड पहलू है, जो पहले से ही उत्तर दिया गया है के अलावा, आप भी फ़ाइल तक पहुँचने की आई/ओ पहलू पर विचार करने की जरूरत है।
वास्तुकला और कैसे मैं अतीत में इस कार्य को पूरा कर लिया है पर एक नोट - हमारा मतलब ये नहीं है कि यह एक सही दृष्टिकोण है या यह आपके आवेदन के लिए जरूरी उचित है कि। हालांकि, मैंने सोचा था कि मेरे नोट्स आपकी विचार प्रक्रिया के लिए सहायक हो सकते हैं:
मैन्युअल रीसेट इवेंट फ़ील्ड सेट करें, इसे सक्रिय करें रीडर या कुछ इसी तरह से कॉल करें, यह और अधिक स्पष्ट हो जाएगा। इसे गलत के रूप में शुरू करें।
एक बूलियन फ़ील्ड सेट करें, इसे टर्मिनेट रीडर थ्रेड कहें। इसे झूठी के रूप में शुरू करें, फिर यह और अधिक स्पष्ट हो जाएगा।
एक कतार < स्ट्रिंग > फ़ील्ड सेट करें, इसे फ़ाइलें कॉल करें और इसे प्रारंभ करें।
मेरा मुख्य आवेदन धागा जांच करता है कि वहाँ इसे में प्रासंगिक फ़ाइल रास्तों में से प्रत्येक लिखने से पहले फ़ाइलों कतार पर एक ताला है देखने के लिए। एक बार फ़ाइल लिखी जाने के बाद, रीसेट ईवेंट कतार में पाठक थ्रेड को इंगित करता है कि कतार में अपठित फ़ाइलें हैं।
मैंने फिर एक कतार पाठक के रूप में कार्य करने के लिए एक धागा स्थापित किया। यह थ्रेड WaitRnyetEvent को WaitAny() विधि का उपयोग करके ट्रिप करने के लिए इंतजार कर रहा है - यह एक अवरोधक विधि है जो मैन्युअल रीसेट इवेंट ट्रिप होने के बाद अनब्लॉक हो जाती है। एक बार यह ट्राइप हो जाने पर, थ्रेड जांचता है कि थ्रेड शटडाउन शुरू किया गया है [टर्मिनेटर रीडर फ़ील्ड की जांच करके]। यदि शटडाउन शुरू किया गया है, तो थ्रेड शानदार ढंग से बंद हो जाता है, अन्यथा यह कतार से अगले आइटम को पढ़ता है और फ़ाइल को संसाधित करने के लिए एक कार्यकर्ता थ्रेड को स्पॉन्स करता है। मैं फिर यह देखने के लिए कतार को लॉक करता हूं कि क्या कोई आइटम बाकी है या नहीं। यदि कोई आइटम नहीं छोड़ा गया है, तो मैं मैन्युअल रीसेट इवेंट को रीसेट करता हूं जो अगले थ्रेड पर हमारे थ्रेड को रोक देगा। मैं फिर कतार को अनलॉक करता हूं ताकि मुख्य धागा इसे लिखना जारी रख सके।
कार्यकर्ता थ्रेड का प्रत्येक उदाहरण फ़ाइल पर एक विशेष लॉक प्राप्त करने का प्रयास करता है, जब तक लॉक सफल होता है, तब तक यह समय-समय पर समाप्त हो जाता है, अगर यह असफल होता है, तो यह फ़ाइल को संसाधित करता है, यह या तो आवश्यकतानुसार पुनः प्रयास करता है, फेंकता है एक अपवाद और खुद को समाप्त कर देता है। अपवाद की स्थिति में, धागा कतार के अंत में फ़ाइल जोड़ सकता है ताकि एक और धागा इसे बाद में एक बार फिर से उठा सके। ध्यान रखें कि यदि आप ऐसा करते हैं, तो आपको अंतहीन पाश पर विचार करने की आवश्यकता है I/O पढ़ने के मुद्दे का कारण हो सकता है। इस तरह की घटना में असफल फाइलों का एक शब्दकोश काउंटर के साथ कितनी बार विफल रहा है, यह उपयोगी हो सकता है ताकि अगर कुछ सीमा तक पहुंची तो आप कतार के अंत में फ़ाइल को फिर से जोड़ना बंद कर सकते हैं।
एक बार अपने आवेदन पाठक धागा अब जरूरत है फैसला करता है, यह सच करने के लिए TerminateReaderThread फ़ील्ड सेट करता है। अगली बार रीडर थ्रेड चक्र इसकी प्रक्रिया की शुरुआत में, इसकी शटडाउन प्रक्रिया सक्रिय हो जाएगी।
प्रतिक्रियाओं के लिए सभी को धन्यवाद, वे सभी शानदार रहे हैं! – Krisc