2009-12-17 18 views
6

deadline_timer मैं boost::asio::deadline_timerबेहतर बढ़ावा asio उदाहरण

हमेशा होगा समय दिया उदाहरण के लिए एक बेहतर उदाहरण के बाद कर रहा हूँ और close विधि कॉल। मैंने टाइमर पर cancel() पर कॉल करने का प्रयास किया लेकिन इससे फ़ंक्शन को async_wait में तुरंत कॉल किया गया।

एसिंक टीसीपी क्लाइंट में टाइमर के साथ काम करने का सही तरीका क्या है?

+1

इस व्यवहार के पीछे कारण है। Async_wait को प्रत्येक कॉल को पूरा करने वाले हैंडलर के साथ जोड़ा जाता है। कॉलिंग रद्द करने से यह प्रभावित नहीं होता है। –

उत्तर

20

आप उल्लेख करते हैं कि एक टाइमर पर कॉलिंग रद्द() को फ़ंक्शन को async_wait को तुरंत कॉल करने का कारण बनता है। यह अपेक्षित व्यवहार है लेकिन याद रखें कि टाइमर रद्द करने के लिए निर्धारित करने के लिए आप टाइमर हैंडलर को पारित त्रुटि की जांच कर सकते हैं। अगर टाइमर रद्द कर दिया गया था, ऑपरेशन_बॉर्टेड पास हो गया है। उदाहरण के लिए:

void handleTimer(const boost::system::error_code& error) { 
    if (error == boost::asio::error::operation_aborted) { 
     std::cout << "Timer was canceled" << std::endl; 
    } 
    else if (error) { 
     std::cout << "Timer error: " << error.message() << std::endl; 
    } 
} 

उम्मीद है कि इससे मदद मिलती है। यदि नहीं, तो आप किस विशिष्ट उदाहरण की तलाश कर रहे हैं?

+0

क्या io_service.stop() टाइमर को रद्द करता है? –

संबंधित मुद्दे