2009-03-30 11 views
21

बंद करते हैं तो मुझे क्या लगता है कि सवाल यह सब कहता है, लेकिन, अगर कोई सी ++ कंसोल ऐप बंद करता है तो क्या होता है? जैसा कि, शीर्ष कोने में "x" पर क्लिक करता है। क्या यह तुरंत बंद हो जाता है? क्या यह किसी प्रकार का अपवाद फेंकता है? क्या यह अनिर्धारित व्यवहार है?जब आप एक सी ++ कंसोल एप्लिकेशन

+1

आप किस प्लेटफ़ॉर्म में रूचि रखते हैं? विंडोज? लिनक्स? यह वास्तव में जवाब को प्रभावित करता है। –

+0

वाक्यांश "कंसोल ऐप" का उपयोग विंडोज का तात्पर्य है, क्योंकि यह चरित्र मोड ऐप्स के लिए एमएस शब्दावली है। – AndrewR

उत्तर

19

साथ "x" शीर्ष कोने में एक सी ++ सांत्वना अनुप्रयोग बंद एक CTRL_CLOSE_EVENT जो आप को पकड़ने और प्रक्रिया सकता है अगर आप SetConsoleCtrlHandler समारोह का उपयोग कर एक नियंत्रण हैंडलर सेट फेंकता है। वहां आप करीबी कार्यक्षमता को ओवरराइड कर सकते हैं और जो कुछ भी करना चाहते हैं उसे निष्पादित कर सकते हैं, और फिर वैकल्पिक रूप से अभी भी डिफ़ॉल्ट व्यवहार निष्पादित कर सकते हैं।

+0

आप कंसोल बंद करने को ओवरराइड नहीं कर सकते हैं। प्रक्रिया निकलती है कि आप 'TRUE' या' FALSE' वापस करते हैं या नहीं। यदि आप इसके बजाय देरी या लौट रहे हैं, उदा। सफाई करने के लिए, आपकी प्रक्रिया मारे जाने से पहले आपको डिफ़ॉल्ट रूप से 5 सेकंड दिए जाते हैं। यह वही है, भले ही आपने मैन्युअल रूप से 'ऑलोक कंसोल' या 'अटैचकंसोल' कहा है, और हैंडलर में 'फ्रीकंसोल' कॉल करने में बहुत देर हो चुकी है। यदि कंसोल बंद करने वाले उपयोगकर्ता को मुख्य प्रक्रिया को समाप्त नहीं करना चाहिए, तो आपको कंसोल के लिए एक बाल प्रक्रिया का उपयोग करने और पाइप के साथ मानक I/O कनेक्ट करने की आवश्यकता है। – eryksun

8

मुझे कल्पना है कि कंसोल प्रक्रिया को ओएस द्वारा अनजाने में मार दिया जाता है। यदि आप इस घटना को फंसाना चाहते हैं और कुछ ऐसा करते हैं तो ऐसा लगता है कि SetConsoleCtrlHandler फ़ंक्शन ऐसा करने का तरीका है।

यह भी देखें:

8

Linux और अन्य यूनिक्स प्रणालियों पर, कंसोल एक अलग प्रक्रिया के रूप में चलाता है। जैसे ही आप खोल बंद करते हैं, यह वर्तमान में सक्रिय प्रक्रिया या प्रक्रियाओं में SIGHUP सिग्नल भेजता है जो पृष्ठभूमि में निष्पादित नहीं होते हैं। यदि प्रोग्रामर इसे संभाल नहीं करता है, तो प्रक्रिया बस समाप्त हो जाती है। यदि आप टर्मिनल और सक्रिय प्रक्रिया के साथ एसएसएच सत्र बंद करते हैं तो वही सिग्नल भेजा जाता है।

3

SIGBREAK विंडोज पर उठाया गया है।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – DLeh

+1

यकीन है कि यह करता है। यह वह जवाब है जब मैं चाहता था कि मुझे यह पृष्ठ मिले। – slater

+0

'SIGBREAK' केवल तभी उठाया जाता है जब आप सी रनटाइम का उपयोग कर रहे हों। विंडोज़ में यूनिक्स सिग्नल नहीं हैं। सी रनटाइम में एक कंसोल कंट्रोल हैंडलर है जो 'CTRL_C_EVENT' को' SIGINT' और अन्य सभी नियंत्रण ईवेंट 'SIGBREAK' पर मैप करता है। – eryksun

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