मैं stdin/निम्नलिखित विशेषताओं के साथ stdout के माध्यम से आईओ nonblocking लिए सबसे अच्छा समाधान खोजने की कोशिश कर रहा हूँ: जब तकक्रॉस-प्लेटफॉर्म (linux/Win32) nonblocking सी ++ आईओ पर stdin/stdout/stderr
- पर्याप्त डेटा है, एन-आकार वाले हिस्सों में पढ़ें।
- यदि पर्याप्त डेटा नहीं है, तो आंशिक खंड में पढ़ें।
- यदि कोई डेटा उपलब्ध नहीं है, तो कुछ होने तक अवरुद्ध करें (भले ही यह एन से छोटा हो)।
लक्ष्य 'नियंत्रण' कोड को तुरंत संसाधित करते समय बड़े डेटासेट के लिए कुशल हस्तांतरण की अनुमति देना है (उन्हें कहीं कुछ आंशिक रूप से भरे बफर में रहने के बजाय)।
मुझे पता है कि मैं धागे और एक आईट्रीम :: get() लूप, या प्लेटफ़ॉर्म-विशिष्ट कोड का एक समूह लिखकर प्राप्त कर सकता हूं (क्योंकि आप विंडोज़ में फ़ाइल हैंडल पर() नहीं चुन सकते हैं) .. ((आईट्रीम :: रीडसम() भी है जो आशाजनक प्रतीत होता है, लेकिन Google पर केवल एक ही परिणाम जो लोग पा सकते हैं, वे वास्तव में अच्छी तरह से काम नहीं करते हैं।))
चूंकि मैंने बहुत कुछ नहीं किया है कोडिंग डब्ल्यू/इन एपीआई, शायद एक बेहतर तरीका है।
यह अपेक्षाकृत आशाजनक दिखता है (एक छोटी समस्या के लिए एक बड़ा हथौड़ा, लेकिन शायद सीखने लायक है) ... धन्यवाद! –
हां, यह पोर्टेबल एसिंक्रोनस I/O के लिए शायद आपकी सबसे अच्छी शर्त है, क्योंकि भाषा में I/O * या * थ्रेड को अनब्लॉक करने के लिए मूल समर्थन नहीं है। आपको किसी प्रकार की लाइब्रेरी का उपयोग करना होगा, और बढ़ावा आमतौर पर एक अच्छी शर्त है। – jalf
(यदि केवल Win32 ने केवल सॉकेट के बजाय मनमानी हैंडल पर चयन() या मतदान() का समर्थन किया है ... कुछ खुदाई करने के बाद, मैंने पुष्टि की है कि मैं जो कर सकता हूं वह कर सकता हूं और इसे स्थापित करने के लिए एक ट्यूटोरियल भी है अप: http://www.highscore.de/boost/process/process/tutorials.html#process.tutorials.async_io –