2009-07-24 15 views
6

मैं SetTimer एपीआई का उपयोग और मैं इस तरह कोड का एक बहुत कुछ देखें:क्या KillTimer आवश्यक है?

case WM_DESTROY: 
    // Destroy the timer. 
    KillTimer(hwnd, IDT_TIMER); 
    PostQuitMessage(0); 
    break; 

मैं इस प्रक्रिया से बाहर निकलने पर KillTimer या सिस्टम स्वचालित रूप से मुक्त संसाधनों कॉल करने के लिए है? KillTimer को संसाधन रिसाव के लिए नेतृत्व करने के लिए भूलना भूल जाता है?

मैं समझता हूं कि अगर टाइमर की आवश्यकता नहीं है तो इसे KillTimer द्वारा नष्ट किया जा सकता है। लेकिन क्या इसे मैन्युअल रूप से नष्ट किया जाना चाहिए?

+0

मैं कुछ शोध कर दिया और बाहर मिल गया है: Wnen एक खिड़की को नष्ट कर दिया जा रहा है सफाई दिनचर्या (xxxFreeWindow कॉल से DestroyWindowsTimers) लागू कर रहे हैं। –

उत्तर

7

एचडब्ल्यूएनडी से निर्धारित टाइमर पूरी तरह से खिड़की (एचडब्ल्यूएन) नष्ट हो जाते हैं। तो नहीं, जब खिड़की निकलती है तो आपको अपने टाइमर साफ़ करने की ज़रूरत नहीं है।

लेकिन खिड़की के नज़दीक खिड़की से साफ किए गए सभी संसाधनों के लिए यह एक अच्छा अभ्यास है।

4

टाइमर स्वचालित रूप से प्रक्रिया से बाहर निकलने पर विंडोज़ द्वारा नष्ट हो जाएगा।

लेकिन ध्यान रखें कि (इसलिए ऐसा प्रतीत होता है) आपका टाइमर खिड़की से संबंधित है, प्रक्रिया नहीं। तो यदि आपका एप्लिकेशन इन विंडो को एक प्रक्रिया के भीतर बनाया और नष्ट करने की अनुमति देता है, तो आप टाइमर लीक करेंगे।

चीजों को स्पष्ट रूप से साफ करने के लिए हमेशा अच्छा अभ्यास है, क्योंकि अन्यथा सफाई की कमी आपको बाद में काटने के लिए वापस आ सकती है।

+0

मुझे विश्वास नहीं है कि यह कहने में सही है कि खिड़की नष्ट होने पर टाइमर रिसाव हो जाएंगे। शायद पुराने विंडोज 95/98 दिनों में, एक टाइमर रिसाव हो सकता है। लेकिन निश्चित रूप से एक्सपी और अप पर, विंडो नष्ट होने पर hwnds पर सेट टाइमर साफ़ हो जाते हैं। – selbie

+2

@selbie: हाँ, मुझे यकीन है कि आप सही हैं। लेकिन मैं अभी भी कहता हूं कि यह मानना ​​अच्छा अभ्यास है कि जब तक आप उन्हें स्पष्ट रूप से साफ नहीं करते हैं तब तक चीजें रिसाव हो जाएंगी। कल्पना करें कि आप विंडो-आधारित टाइमर से कॉलबैक-आधारित वाले लोगों में बदल जाते हैं - तब तक जब तक आप उन्हें स्पष्ट रूप से मार नहीं देते तब तक आपको रिसाव होगा। – RichieHindle

0

MSDN के अनुसार, एक टाइमर को मार देना चाहिए:

आवेदन टाइमर कि अब जरूरी हैं नष्ट करने के लिए KillTimer समारोह का उपयोग करना चाहिए। निम्न उदाहरण स्थिरांक IDT_TIMER1, IDT_TIMER2, और IDT_TIMER3 द्वारा पहचाने गए टाइमर को नष्ट कर देता है।

// टाइमर को नष्ट करें।
KillTimer (hwnd, IDT_TIMER1);
KillTimer (hwnd, IDT_TIMER2);
KillTimer (hwnd, IDT_TIMER3);

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644901(v=vs.85).aspx#creating_timer

+0

हां, लेकिन यदि आपके टाइमर के पास एक खिड़की के समान जीवनकाल है तो आप 'KillTimer' को छोड़ सकते हैं। –