एक सांत्वना अनुप्रयोग में विश्वसनीय टाइमर


103

मुझे पता है कि .NET में तीन टाइमर प्रकार हैं ( .NET फ्रेमवर्क क्लास लाइब्रेरी में टाइमर क्लासेस की तुलना करें )। मैंने एक थ्रेडेड टाइमर को चुना है क्योंकि अन्य प्रकार बहाव कर सकते हैं यदि मुख्य धागा व्यस्त है, और मुझे विश्वसनीय होने की आवश्यकता है।

जिस तरह से यह टाइमर टाइमर के नियंत्रण में काम करता है, उसे दूसरे धागे पर रखा जाता है ताकि यह हमेशा व्यस्त रहने के साथ ही माता-पिता के धागे पर काम शुरू होने के साथ ही टिक सके।

कंसोल टाइमर में इस टाइमर के साथ समस्या यह है कि जहां टाइमर एक और थ्रेड पर टिक कर रहा है, वहीं मुख्य थ्रेड एप्लिकेशन क्लोज़ के लिए कुछ भी नहीं कर रहा है।

मैंने एक while trueलूप जोड़ने की कोशिश की , लेकिन तब मुख्य धागा बहुत व्यस्त है जब टाइमर बंद हो जाता है।

जवाबों:


59

आप Console.ReadLine()मुख्य धागे को अवरुद्ध करने के लिए कुछ का उपयोग कर सकते हैं , इसलिए अन्य पृष्ठभूमि के धागे (जैसे टाइमर धागे) अभी भी काम करेंगे। आप निष्पादन को अवरुद्ध करने के लिए एक AutoResetEvent का उपयोग भी कर सकते हैं , तब (जब आपको आवश्यकता हो) आप मुख्य थ्रेड को जारी करने के लिए उस AutoResetEvent ऑब्जेक्ट पर सेट () विधि को कॉल कर सकते हैं। यह भी सुनिश्चित करें कि टाइमर ऑब्जेक्ट के लिए आपका संदर्भ स्कोप और एकत्र किए गए कचरे से बाहर नहीं जाता है।


20

अपने प्रसंस्करण के अंत में मुख्य थ्रेड को ब्लॉक करने के लिए एक ManualResetEvent का उपयोग करने पर विचार करें , और Reset()टाइमर की प्रक्रिया समाप्त होने के बाद उस पर कॉल करें । यदि यह कुछ ऐसा है जिसे लगातार चलाने की आवश्यकता है, तो इसे कंसोल ऐप के बजाय सेवा प्रक्रिया में स्थानांतरित करने पर विचार करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.