यहां मेरी समस्या है: मुझे सीरियल पर डिवाइस भेजने और प्राप्त करने में सक्षम होना चाहिए। यह एक बहु थ्रेडेड फैशन में किया जाना है। प्रवाह इस प्रकार है:डिवाइस से बात करने के लिए निर्माता/उपभोक्ता सीरियल
डिवाइस के लिए प्रतीक्षा करें मुझे कुछ भेजने के लिए - या निष्क्रिय हैं, तो यदि डिवाइस के साथ ऑनलाइन देखने के लिए स्थिति को क्वेरी
डिवाइस मुझे कुछ है, तो प्रक्रिया संदेश भेजता है, तो स्वीकार करते हैं , और आवश्यकतानुसार अन्य आदेशों को करने के लिए डिवाइस को बताएं
अभी, मुझे थ्रेड प्राप्त होता है और थ्रेड प्रेषित होता है। प्राप्त थ्रेड में थोड़ी देर लूप होती है जो एक बाइट के लिए रीडफाइल (...) के माध्यम से सीरियल पोर्ट की जांच करता रहता है। अगर मेरे पास बाइट है, तो मैं अपना बफर बनाना शुरू कर देता हूं और फिर मुझे यह निर्धारित करने के लिए डेटा को पार्स करता हूं कि मुझे क्या भेजा गया था।
प्रेषण धागा अगले थ्रेड को पढ़ा धागा द्वारा परिभाषित करता है और इसे उसी COM पोर्ट पर WriteFile के माध्यम से भेजता है। कुंजी यह है कि मेरे और डिवाइस के बीच एक प्राप्त/प्रेषण संबंध है।
मेरा सवाल है, क्या मेरे यहां एक नेस्टेड निर्माता/उपभोक्ता मॉडल है? यदि मेरा प्राप्त थ्रेड डिवाइस से उपभोग कर रहा है और प्रेषण थ्रेड डिवाइस पर उत्पादन कर रहा है, तो धागे को स्वाभाविक रूप से बात करने की आवश्यकता है ताकि वे सिंक्रनाइज़ हो जाएं-सही? डिवाइस पर कुशलतापूर्वक और त्वरित रूप से बात करने के अपने प्रयासों को सिंक्रनाइज़ करने का सबसे अच्छा तरीका क्या है? नोट: मैं सी ++ बिल्डर 5 का उपयोग कर रहा हूं जिसमें टीटीएचड हैं और महत्वपूर्ण वर्गों और म्यूटेक्स का उपयोग कर सकते हैं।
संपादित करें: मैं भी मतदान का उपयोग कर रहा हूं इसलिए मैं प्रतीक्षाकॉमवेन्ट का उपयोग करने के लिए भी खुला हूं, अगर यह बेहतर काम करेगा!
ठीक है, लेकिन मैं डिवाइस तक पहुंच को सिंक्रनाइज़ कैसे करूं ताकि जब मैं पढ़ रहा हूं, तो मैं लिख नहीं रहा हूं? वैश्विक ध्वज? –
क्या आप निश्चित हैं कि आपको ऐसा करना है? यदि ऐसा है तो आप पढ़ने/लिखने के कार्यों को सिंक करने के लिए एक सेमफोर का उपयोग कर सकते हैं। यह http://stackoverflow.com/questions/1488712/is-it-safe-to-read-and-write-to-a-serial-port-at-the-same-time-via- अलग-अलग हो सकता है उपयोगी। – Duck