अन्य स्टैक ओवरफ़्लो प्रविष्टियों और boost::asio
दस्तावेज़ों को पढ़ने से, मैंने पुष्टि की है कि कोई सिंक्रोनस एएसआईओ पढ़ने/लिखने वाली कॉल नहीं है जो कॉल के पैरामीटर के रूप में उपयोग में आसान टाइमआउट भी प्रदान करती है।सी ++ बूस्ट एएसआईओ: टाइमआउट के साथ कैसे पढ़ना/लिखना है?
मैं एक पुराने स्कूल लिनक्स सॉकेट एप्लिकेशन को चुनने के बीच में हूं (2) कॉल जो टाइमआउट्स को नियोजित करता है, और मुझे इसे कम या कम करने की आवश्यकता है।
तो boost::asio
में ऐसा करने का सबसे अच्छा तरीका क्या है? एएसओ दस्तावेज को देखते हुए, टाइमर के साथ विभिन्न चीजों के कई भ्रमित उदाहरण हैं, लेकिन मैं काफी उलझन में हूं।
मुझे इसका एक सरल-पढ़ने वाला उदाहरण देखना अच्छा लगेगा: सॉकेट से पढ़ें, लेकिन अधिकतम X सेकंड के लिए प्रतीक्षा करें जिसके बाद फ़ंक्शन या तो कुछ भी नहीं लौटाता है, या जो कुछ भी सक्षम था उसके साथ लौटाता है टाइमआउट की समयसीमा समाप्त होने से पहले सॉकेट से पढ़ने के लिए।
क्या आप कृपया इस उदाहरण के बारे में भ्रमित करने के बारे में विस्तार से बता सकते हैं: http://think-async.com/Asio/asio-1.4.7/src/examples/timeouts/blocking_tcp_client।सीपीपी - आवश्यक तर्क यह है कि, आप 2 एसिंक कार्यों को प्रेषित करते हैं, एक पढ़ा/लिखते हैं और दूसरा समय-समय पर पढ़ता है यदि रीड/राइट रिटर्न पहले आप डेडलाइन टाइमर को मार देते हैं, यदि समय सीमा टाइमर तर्क देता है तो पढ़ना/लिखना है अभी भी बकाया है - वहां से आप अपने टाइम-आउट तर्क के साथ आगे बढ़ते हैं। बहुत ही सरल –
एक कोने का मामला है जो एचएफ नेटवर्किंग में उत्पन्न हो सकता है जो कॉलबैक की कतार से संबंधित है। टाइमआउट सीबी कतारबद्ध है, तो पढ़ना/लिखना कतारबद्ध है। आप टाइमआउट सीबी का सामना करते हैं और समय-समय पर तर्क निष्पादित करना शुरू करते हैं जब वास्तविकता में पढ़ा/लिखना पूरा हो गया था, मैंने देखा है कि एक संभावित समाधान डबल चेक लॉक के समान कुछ है - संक्षेप में पहली बार टाइमआउट लौटने पर एक माध्यमिक टाइमआउट करें, लेकिन फिर यह वही समस्या है यदि दूसरी टाइमआउट के बाद पढ़ा/लिखना कतारबद्ध है ... –
बस याद रखें कि टाइमआउट एक कठिन स्थिति है, आप कह रहे हैं कि मुझे कुछ निश्चित मात्रा में कुछ नहीं मिलता है समय, मैं कुछ विशिष्ट करूँगा - इसमें यह तथ्य शामिल है कि पढ़ना/लिखना पहले से ही हो सकता है और आपके रास्ते पर है, यह इस तथ्य को नहीं बदलेगा कि आपने इसे अभी तक प्राप्त नहीं किया है। –