एसिंक्रोनस कनेक्शन में टाइमर का एक पहलू है जो मैं जानना चाहता हूं कि मैं सही ढंग से समझता हूं या नहीं।कुछ स्पष्टीकरण की आवश्यकता है बूस्ट एएसआई एसिंक्रोनस ऑपरेशंस और टाइमर
मान लीजिए कि हम एक पठन ऑपरेशन करने से पहले एक टाइमर सेट करते हैं, जिसमें हैंडलर शामिल है, और फिर run()
io_service।
जैसा कि मैंने समझ लिया है, io_service जैसे ही प्रबंधक लागू किए जाने के बाद समाप्त हो जाती है के रूप में समाप्त हो जाती है, जो दो कारणों से हो सकता है:
क) पढ़ा आपरेशन पूरा हो गया है।
बी) टाइमर इसकी सीमा तक पहुंच गया है।
मान लीजिए कि पहली (ए) स्थिति तक पहुंच गई है, और टाइमर समाप्त होने से पहले पठन ऑपरेशन पूरा हो चुका है।
सवाल यह है कि उस टाइमर का क्या होता है? क्या हमें इसे खत्म करने की ज़रूरत है। कहना
dTimer_.expires_from_now (boost::posix_time::seconds(0));
after the io_service.run()?
आप एक नया अंतराल करने के लिए इसे रीसेट कर सकते हैं यदि आवश्यक हो तो एक और पढ़ने ऑपरेशन के लिए एक ही टाइमर वस्तु फिर से उपयोग करें?
क्या मैं io_service को रीसेट कर सकता हूं और उस नए ऑपरेशन के लिए एक ही run()
में उसी ऑब्जेक्ट का पुन: उपयोग कर सकता हूं?
व्यापक जवाब है, +1 बढ़ावा :: asio :: त्रुटि के लिए :: operation_aborted – Ralf
आप शामिल प्रक्रिया के अपने स्पष्ट और कुरकुरा विवरण के लिए बहुत बहुत, लेकिन अभी भी एक सवाल धन्यवाद: मेरी पहली परिदृश्य मान, अगर वहाँ एक पठन ऑपरेशन और टाइमर है, क्या पहली बार समाप्त होने पर io_service समाप्त होता है? भूतपूर्व? अथवा दोनों? –
@ पुरानी नौसिखिया 'io_service :: रन()' कॉलर को नियंत्रण देता है जब कोई और काम नहीं होता है, यह [प्रलेखन] (http://www.boost.org/doc/libs/1_46_0 में अच्छी तरह से वर्णित है) /doc/html/boost_asio/reference/io_service/run/overload1.html)। आपके संदर्भ में इसका अर्थ यह है कि सभी बकाया हैंडलर, 'async_read' और' async_wait' दोनों को लौटने से पहले बुलाया जाएगा। अच्छी स्पष्टीकरण के लिए –