यह की कमी है: एक देशी Win32 प्रक्रिया समाप्त करने के लिए के लिए, दो स्थितियों में से एक पूरी होनी चाहिए:
- किसी ने कॉल ExitProcess या TerminateProcess।
- सभी थ्रेड बाहर निकलें (उनके थ्रेडप्रोक से लौटकर (WinMainEntryPoint सहित जो विंडोज़ द्वारा बनाए गए पहले थ्रेड हैं), बंद करें (ExitThread को कॉल करके), या समाप्त हो गया है (कोई टर्मिनेट थ्रेड कहता है)।
(पहली शर्त वास्तव में दूसरी है: निकासप्रोसेस और टर्मिनेट प्रोसेस, उनके सफाई के हिस्से के रूप में, कॉल टर्मिनेट प्रक्रिया में प्रत्येक थ्रेड पर थ्रेड दोनों)।
सी क्रम अलग अलग परिस्थितियों आरोपित करता है: समाप्त करने के लिए एक सी के लिए/सी ++ आवेदन, आपको या तो: मुख्य (या WinMain) से
- वापसी।
- कॉल से बाहर निकलें()
बाहर निकलने के कॉलिंग() या मुख्य से लौट() दोनों सी क्रम ExitProcess कॉल करने के लिए कारण()।सी & सी ++ अनुप्रयोगों को उनके धागे को साफ किए बिना बाहर निकलें। मैं, व्यक्तिगत रूप से सोचता हूं कि यह एक बुरी बात है।
हालांकि, गैर तुच्छ Win32 प्रक्रियाएं कभी समाप्त नहीं हो सकती हैं क्योंकि कई पूरी तरह से, अन्यथा उचित, Win32 उपप्रणाली कार्यकर्ता धागे बनाते हैं। winsock, ओले, आदि। और उन धागे को स्वचालित रूप से बंद करने के लिए कोई रास्ता नहीं प्रदान करते हैं।
स्रोत
2010-02-04 08:05:20
यहां दिया गया स्पष्टीकरण 100% सही है। मैंने इसे प्रमाणित किया है कि WinMain थ्रेड सी रनटाइम द्वारा बनाया गया है और जब थ्रेड सी रनटाइम से बाहर निकल गया जिसे एक्जिटप्रोसेस कहा जाता है जिसके कारण पूरे एप्लिकेशन को समाप्त कर दिया जाता है (अन्य थ्रेड सहित)। –