किसी भी तरीके से यह जांचने के लिए कि deadline_timer सक्रिय है या नहीं? जैसे अगर यह async_wait स्थिति में है और रद्द नहीं किया गया था?कैसे जांचें कि boost :: deadline_timer सक्रिय है
उत्तर
टाइमआउट के लिए हैंडलर एक त्रुटि हालत अगर टाइमर रद्द कर दिया गया (और साथ ही एक सामान्य समय समाप्त) के साथ बुलाया जाएगा। तो क्या आप async_wait
पर कॉल करने से पहले बस एक बूल सेट नहीं कर सकते हैं और फिर त्रुटि स्थिति सेट होने पर हैंडलर में रीसेट कर सकते हैं?
तीन विकल्प दिमाग में आते हैं:
अपने खुद के टाइमर वर्ग (बेशक deadline_timer का उपयोग करके) अपनी ही do_async_wait सदस्य वाले बनाएँ। इस सदस्य में आप एक सदस्य चर सेट करते हैं जिसे आंतरिक bline_timer पर async_wait को कॉल करने से पहले एक बूल isWaiting() सदस्य या इसी तरह से वापस किया जा सकता है। ध्यान दें कि मुझे नहीं लगता कि async_wait सदस्य आभासी है, इसलिए आप केवल deadline_timer से प्राप्त नहीं कर सकते हैं और ओवरराइड कर सकते हैं। ध्यान दें कि जब आपके हैंडलर को कॉल किया जाता है तो आपको ध्वज को रीसेट करने की भी आवश्यकता होगी (अपना खुद का टाइमर हैंडलर जो उसके बाद किसी भी अन्य हैंडलर को आगे बढ़ाकर) या जब रद्द किया जाता है।
जो भी आप चाहते हैं उसे करने के लिए बूस्ट कोड संपादित करें। जहां तक मुझे पता है, यह पूरी तरह से कानूनी है, हालांकि यह निश्चित रूप से एक बहुत अच्छा विकल्प नहीं है।
अपनी आवश्यकताओं/डिज़ाइन को बदलें ताकि आपको यह जानने की आवश्यकता न हो।
इस बारे में कैसे?
boost::asio::deadline_timer mTimer;
const bool timerExpired = (mTimer.expires_at()
<= boost::posix_time::second_clock::local_time());
में कुछ क्योंकि टाइमर समय पर वास्तव में समाप्त करने के लिए गारंटी नहीं है यह काम नहीं करेगा याद नहीं है की जाँच की गई थी। –
यह किसी अन्य टाइमर से अलग कैसे है? –
यह 'किसी अन्य टाइमर से अलग' नहीं है। लेकिन यदि आप इस कोड का उपयोग यह पता लगाने के लिए करते हैं कि टाइमर सक्रिय है या नहीं, तो दौड़ की स्थिति है जहां टाइमर की समयसीमा समाप्त होने से पहले यह एक छोटे अंतराल के लिए सच हो जाएगा। यदि आप इसका उपयोग करते हैं, उदाहरण के लिए, यह जांचने के लिए कि क्या यह मुफ्त मेमोरी के लिए सुरक्षित है, तो आपका प्रोग्राम क्रैश हो जाएगा। –
मुझे पता है कि यह इस बिंदु पर एक सा पुराना है, लेकिन मैं एक और संभव सुझाव है: कैसे के बारे में कार्यान्वयन हो रही है और फिर अगर वहाँ संभवतः इंतजार में लंबित हैं अनुरोध कर रहा। यह इस तरह दिखेगा:
mTimer.get_implementation().might_have_pending_waits
हाँ, सिर्फ अगर मैं deadline_timer इंटरफ़ेस –