मैं उचित कोडिंग में कुछ सलाह की जरूरत होती हूँ:अच्छा कोडिंग? (एकाधिक संदेश लूप्स)
मैं एक कार्यक्रम जहां कई धारावाहिक कनेक्शन उपयोग किया जाता है पर काम कर रहा हूँ। प्रत्येक संचार लाइन में एक नियंत्रक परत के रूप में काम करने वाला नियंत्रक होता है। नियंत्रक और सीरियल पोर्ट के बीच, स्थानांतरण के लिए तैयार पैकेज में डेटा लपेटने के लिए एक प्रोटोकॉल डाला जाता है। प्रोटोकॉल असफल डिलीवरी का ख्याल रखता है, आदि भेजता है यह सुनिश्चित करने के लिए कि जीयूआई लटका नहीं होगा, प्रत्येक कनेक्शन लाइन (प्रोटोकॉल और सीरियल पोर्ट) एक अलग थ्रेड पर बनाई गई है। नियंत्रक को मुख्य धागे से संभाला जाता है, क्योंकि इसमें जीयूआई में नियंत्रण होता है।
वर्तमान में, जब मैं धागे बनाते हैं, तो मैंने उन पर एक संदेश लूप बनाने के लिए चुना है (एप्लिकेशन.रुन()), इसलिए बफर मतदान करना और कोई काम नहीं होने पर, मैं बस थ्रेड (BeginInvoke) का उपयोग करता हूं और उपयोग करता हूं एक बफर के रूप में संदेश पाश। यह वर्तमान में अच्छी तरह से काम करता है, और अब तक कोई गंभीर समस्या नहीं है।
मेरा प्रश्न है अब: इस "अच्छा कोडिंग" किसी तीसरे बात है, या मैं बजाय चलने पर थोड़ी देर के पाश का उपयोग करें और मतदान बफ़र्स होना चाहिए ?, या?
मैं कोड दिखाना चाहता हूं, लेकिन अब तक यह कोड की कई हज़ार लाइनें हैं, इसलिए यदि आप कोड के किसी हिस्से को देखने की आवश्यकता है तो कृपया विशिष्ट रहें। :)
धन्यवाद।
वास्तव में नहीं, नहीं। WM_COPYDATA प्रक्रियाओं के बीच संचार के लिए ठीक है। यह एक प्रक्रिया के अंदर इंटर-थ्रेड कॉम के लिए इसका उपयोग कर व्यर्थ है। बफर/ब्लॉब/पॉइंटर द्वारा जो भी ऑब्जेक्ट्स पास करना है, उदाहरण के लिए यह बहुत आसान/सरल है। संदेश के लिए * बफर कास्टिंग करके।एलपीराम, पोस्टमेसेज() आईएनजी और 'अन्य छोर' पर वापस कास्टिंग। –
विंडोज संदेश कतारों को GUI थ्रेड्स को संचारित करने के लिए अनुकूलित किया गया है। जीयूआई धागे से गैर-जीयूआई कार्य धागे से संचार करने के लिए इष्टतम नहीं हैं। यहां तक कि एक साधारण सेमफोर-आधारित, गैर-अनुकूलित उत्पादक-उपभोक्ता कतार WMQ की तुलना में लगभग चार गुना तेज है। अधिकांश ऐप्स में, पी-सी कतार प्रदर्शन सामान्य रूप से एक मुद्दा नहीं है। –
मैं वास्तव में दोनों बिंदुओं पर सहमत हूं। मैं WM_COPYDATA संपादित कर दूंगा; मैं स्पष्ट रूप से सोच नहीं रहा था। संदेश कतार के संबंध में हालांकि, यह एक सामान्यीकृत घटना-आधारित समाधान है। अपने ऐप की आवश्यकताओं के आधार पर, अन्य मॉडल बेहतर हो सकते हैं। – tenfour