/ / C ++ - c ++, सीरियल-पोर्ट, बफर में एक पूर्ण परिपत्र बफ़र को कैसे संभालना है

सी ++ में पूर्ण सर्कुलर बफर को कैसे संभालें - सी ++, सीरियल-पोर्ट, बफर

यह एक सामान्य प्रश्न है, मैं C ++ से नौसिखिया हूंऔर मैं एक ऐसी परियोजना के साथ खेल रहा हूं जो सीरियल बजाए गए एक वर्कर थ्रेड में एक सीरियल बफ़र में सीरियल / यूएसबी पोर्ट से डेटा पढ़ता है, और मेरे पास एक और जीयूआई यूआई धागा है जो हर 100 मिसेक डेटा को पकड़ लेता है। क्या होता है जब डेटा बैकअप हो जाता है और डेटा बफर फुल हो जाता है, तो मैं "ब्लॉक नहीं होना चाहता" "एक्स्ट्रा", या क्या मैं मूल बफर को बड़ा बनाता हूं?

धन्यवाद

उत्तर:

जवाब के लिए 3 № 1

इसे कुंद करने के लिए, आप चौक गए।

अब, आइए देखें कि चीजें कितनी बुरी हैं, बफर के अतिप्रवाह के इलाज के कई तरीके हैं:

  1. कुछ डेटा ड्रॉप करें, वैकल्पिक रूप से चुपचाप। आपको यह तय करना होगा कि शुरू या अंत से डेटा गिराना बेहतर काम करता है या नहीं।
  2. बफर में खाली जगह के लिए कुछ डेटा मर्ज करें।
  3. ओवरफ्लो को पकड़ने के लिए हाथ में एक आपातकालीन-बफर रखें।
  4. ऑपरेशन को रद्द करें, चीजों को पूरी तरह से फिर से तैयार किया जाना चाहिए।
  5. त्रुटि को अनदेखा करें और सिर्फ दिखावा करें कि यह कभी नहीं हो सकता है। परिणाम दिलचस्प और काफी अप्रत्याशित हो सकता है।
  6. तेजी से हाथ बंद / प्रसंस्करण के लिए फिर से डिजाइन।
  7. पीक-थ्रूपुट के लिए एक बड़े बफर के साथ फिर से डिजाइन।

वैसे भी, यदि आप इसके बारे में अधिक पढ़ना चाहते हैं, तो रियलटाइम और सॉफ्ट-रियलटाइम प्रोग्रामिंग में देखें।


उत्तर № 2 के लिए 1

आप एक परिपत्र बफ़र का उपयोग कर सकते हैं जो अधिक मेमोरी आवंटित करता है जब यह भरा हुआ होता है।

यदि आप अपने स्वयं के परिपत्र बफर बनाने में रुचि नहीं रखते हैं, तो आप उपयोग कर सकते हैं बढ़ावा एक है, या इसे एक संदर्भ के रूप में जांचें।


जवाब के लिए 0 № 3

मैं इसे एक टिप्पणी में डालूंगा, लेकिन जब से मैं "t: कर सकता हूं क्या कोई कारण है कि आप अपने बफ़र्स को समायोजित नहीं कर सकते हैं?"

अगर मुझे कोई कारण नहीं दिख रहा है तो आपको अपने बफर का उपयोग क्यों नहीं करना चाहिए ताकि आपको यहां कुछ सेफटेस्पेक्ट दिया जा सके, जो कि बफ़र्स के लिए बना है।