2015-06-23 8 views
7

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

कभी कभी संदेश (पता) स्मृति नहीं किया जा सकता, कभी कभी "पढ़ें" नहीं "लिखने" हो सकता है।

सामान्य तरीके से एप्लिकेशन को बंद करने से ऐसे संदेश उत्पन्न नहीं होते हैं।

मैं "विंडोज शटडाउन" का अनुकरण कैसे कर सकता हूं ताकि मैं अपना आवेदन डीबग कर सकूं? मैं यह कैसे पता लगा सकता हूं कि एप्लिकेशन ऐसा करने का प्रयास कर रहा है कि वह नहीं कर सकता है?

+1

यदि आपका एप्लिकेशन शट डाउन और सिग्नल और घटनाओं को मारने का जवाब नहीं देता है, तो आपका प्रोग्राम समाप्त हो जाएगा चाहे वह वर्तमान में क्या कर रहा हो। और अगर सिस्टम किसी भी तरह से नीचे जा रहा है, तो क्या यह वास्तव में मायने रखता है कि यह अपनी याददाश्त के साथ क्या करता है? यह वैसे भी बचाया नहीं जाएगा। –

+0

विंडोज़ बंद होने पर 'WM_QUIT' संदेशों को भेजता है, ताकि आप यह जांच सकें कि जब आप इसे अपने ऐप पर भेजते हैं तो क्या होता है। – usr2564301

उत्तर

5

जब विंडोज बंद करना चाहता है, तो यह एप्लिकेशन को घटनाओं की एक श्रृंखला भेजता है; जैसे WM_ENDSESSION और WM_QUIT। आप उन संदेश हैंडलर में इन्हें संसाधित कर सकते हैं जिनका आप उपयोग कर रहे हैं; आम तौर पर एप्लिकेशन को इन संदेशों को उचित और जल्दी से जवाब देने की आवश्यकता होगी अन्यथा ओएस अभी भी एप्लिकेशन को समाप्त कर देगा। मुझे यकीन नहीं है कि इस संबंध में कौन सी डिफ़ॉल्ट प्रसंस्करण wxwidgets प्रदान करता है। इन्हें हुकिंग से एप्लिकेशन त्रुटि का निदान करने में मदद मिलेगी।

कुछ ऐसी चीजें हैं जिन्हें आप करने का प्रयास कर सकते हैं;

  • बंद अनुक्रम आसान अनुकरण करने के लिए (यदि सभी) नहीं होगा - एक बहुत शटडाउन के दौरान होता है; सटीक स्थिति और स्थिति पूरी तरह से अनुकरण करना मुश्किल है।
  • शट डाउन से पहले एप्लिकेशन की स्थिति का निदान करने के मामले में, आप WM_QUERYENDSESSION को संसाधित करने का प्रयास कर सकते हैं और इसे FALSE से बंद करने से रोकने के लिए प्रतिक्रिया दे सकते हैं (विंडोज के नए संस्करणों के साथ आप शटडाउन को रोक नहीं सकते हैं, इसलिए यह आप जिस मंच पर हैं उसके आधार पर काम नहीं कर सकते हैं)।
  • आप एमएसडीएन पर विस्तृत डेटा के साथ WM_ENDSESSION (उदा। PostMessage के माध्यम से) भेजकर WM_ENDSESSION संदेश पर एप्लिकेशन की तत्काल प्रतिक्रिया का परीक्षण करने का प्रयास कर सकते हैं।

टर्मिनल आधारित अनुप्रयोगों के लिए; यदि आवश्यक हो तो आप संकेतों में भी हुक कर सकते हैं (SIGKILL मुझे विश्वास है)। यह माइक्रोसॉफ्ट reference for more detail देखें। आप SetConsoleCtrlHandler हुक भी कर सकते हैं। लेकिन चूंकि आप टूलकिट का उपयोग करते हैं, इसलिए पहले से ही आवेदन में भेजे गए संदेशों का उपयोग करना बेहतर होगा।

+2

सिम्युलेटिंग शटडाउन इतना आसान नहीं है, विशेष रूप से क्योंकि आधुनिक विंडोज संस्करण सिर्फ एप्लिकेशन को मार देते हैं यदि यह पर्याप्त तेज़ी से वापस नहीं आता है। इसका परीक्षण करने का सबसे अच्छा तरीका है अपने आवेदन को वीएम के अंदर चलाने और वास्तव में इसे बंद करना। –

+0

@VZ। मैं मानता हूं कि शटडाउन को पूरी तरह से "अनुकरण" करने का कोई तरीका नहीं है, ये सभी वास्तव में संकेत देते हैं कि ओपी इस मुद्दे का निदान करने के लिए क्या कर सकता है। मैं इसे और अधिक स्पष्ट करने की कोशिश करने के लिए इसे संपादित कर दूंगा। – Niall

+0

@VZ, ठीक है, मुझे मिल गया। लेकिन त्रुटि संदेश मेरे ऐप से आता है, जब यह स्मृति के साथ कुछ अनुचित चीजों को करने का प्रयास करता है। तो, इस समय ओएस द्वारा यह नहीं मारा जाता है।यह सिर्फ ओएस से सिग्नल प्राप्त करने के लिए – Neka

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