थ्रेड एग्जिट कोड क्या है?


115

डिबगिंग करते समय आउटपुट विंडो में वास्तव में थ्रेड एग्जिट कोड क्या है? यह मुझे क्या जानकारी देता है? क्या यह किसी तरह से उपयोगी है या सिर्फ एक आंतरिक सामान है जो मुझे परेशान नहीं करना चाहिए?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

क्या इसके महत्व के साथ संभव निकास कोड की सूची में कुछ प्रकार है?

जवाबों:


100

वहाँ वास्तव में इस विषय पर स्पष्ट रूप से बहुत कुछ नहीं लगता है, लेकिन बाहर निकलने वाले कोड का उपयोग इस बात पर संकेत देने के लिए किया जाता है कि धागा कैसे बाहर निकलता है, 0 इसका मतलब यह है कि यह सुरक्षित रूप से बाहर निकलता है, जबकि इसका मतलब यह नहीं था उम्मीद के मुताबिक बाहर न निकलें। लेकिन फिर इस एग्जिट कोड को पूरी तरह से अनदेखा करने के लिए अपने आप को कोड में सेट किया जा सकता है।

निकटतम लिंक मैं अधिक जानकारी के लिए उपयोगी होने के लिए मिल सकता है है इस

उपरोक्त लिंक से उद्धरण:

कभी भी बाहर निकलने की विधि, पूर्णांक जिसे आप अपनी प्रक्रिया या थ्रेड से लौटाते हैं, 0-255 (8 बिट्स) से मान होना चाहिए। शून्य मान सफलता को इंगित करता है, जबकि गैर शून्य मान विफलता को इंगित करता है। हालाँकि, आप किसी भी पूर्णांक मान को एक एक्जिट कोड के रूप में वापस करने का प्रयास कर सकते हैं, केवल पूर्णांक के सबसे कम बाइट को आपकी प्रक्रिया या थ्रेड से बाहर निकलने वाले कोड के हिस्से के रूप में लौटाया जाता है। उच्च क्रम बाइट्स को ऑपरेटिंग सिस्टम द्वारा प्रक्रिया के बारे में विशेष जानकारी देने के लिए उपयोग किया जाता है। एग्जिट कोड बैच / शेल कार्यक्रमों में बहुत उपयोगी है जो किसी की सफलता या विफलता के आधार पर अन्य कार्यक्रमों को सशर्त रूप से निष्पादित करते हैं।


GetEXitCodeThread के लिए दस्तावेज़ से

महत्वपूर्ण GetExitCodeThread फ़ंक्शन थ्रेड के समाप्त होने के बाद ही एप्लिकेशन द्वारा परिभाषित एक वैध त्रुटि कोड देता है। इसलिए, किसी अनुप्रयोग को STILL_ACTIVE (259) का उपयोग त्रुटि कोड के रूप में नहीं करना चाहिए। यदि कोई थ्रेड STILL_ACTIVE (259) को एक त्रुटि कोड के रूप में देता है , तो इस मान के लिए परीक्षण करने वाले एप्लिकेशन इसका अर्थ यह बता सकते हैं कि थ्रेड अभी भी चल रहा है और थ्रेड समाप्त होने के बाद थ्रेड के पूरा होने के लिए परीक्षण करना जारी रखता है, जो डाल सकता है। एक अनंत लूप में आवेदन।


इस सब के बारे में मेरी समझ यह है कि यदि आप अपने स्वयं के अनुप्रयोग के लिए थ्रेड का उपयोग कर रहे हैं तो बाहर निकलने का कोड इतना सब मायने नहीं रखता है । इसका अपवाद संभवतः है यदि आप एक ही समय में एक-दूसरे पर थ्रेड के कुछ जोड़े चला रहे हैं जो एक-दूसरे पर निर्भरता रखते हैं। यदि इस त्रुटि कोड को पढ़ने के लिए किसी बाहरी स्रोत की आवश्यकता है, तो आप इसे अन्य अनुप्रयोगों को अपने धागे की स्थिति जानने के लिए सेट कर सकते हैं।


1
क्या आउटपुट विंडो से इसे हटाने का कोई तरीका है?
अर्ने एवरट्सन

26
@ArneEvertsson - यदि आप टूल्स में जाते हैं | विकल्प ... "डीबगिंग \ आउटपुट विंडो" क्षेत्र के तहत, "थ्रेड एक्ज़िट मैसेज" (ऑन | ऑफ) सेटिंग है।
जोश पोली

2
इसका मतलब यह हो सकता है कि आप एक सिंक्रोनस एप्लिकेशन मुख्य थ्रेड के भीतर async विधियों का उपयोग कर रहे हैं और उनके समाप्त होने की प्रतीक्षा नहीं कर रहे हैं। इससे निपटने का सबसे आसान तरीका यह है कि किसी नमूने पर प्रतीक्षा () शुरू की गई और लौटाए गए तरीके को कॉल करें जैसा कि इस नमूने में दिखाया गया है: asp.net/web-api/overview/advanced/… RunAsync().Wait();
ब्रॉन डेविस

1
@BronDavies थ्रेड-पूल थ्रेड प्रतीक्षा कोड () को कॉल करने के बाद भी त्रुटि कोड 259 से बाहर निकलता है। यहाँ मेरा कोड है: static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }बात यह है कि, कार्य थ्रेड पूल थ्रेड द्वारा निष्पादित किए जाते हैं और थ्रेड पूल की हेयुरेटिस के आधार पर यह आपके कार्य समाप्त होने के बाद भी थ्रेड को समाप्त नहीं कर सकता है। थ्रेड बस अगले कार्य के साथ सौंपा जाने के लिए प्रतीक्षा के पूल में लौटता है। और यही कारण है कि एग्जिट कोड STILL_ACTIVE (259) यहां इतना सहज लगता है।
RBT

लिंक में लेख गलत है। कोई आवश्यकता नहीं है कि थ्रेड एग्जिट कोड (या उस मामले के लिए एक प्रोसेस एग्जिट कोड) केवल एक ही बाइट हो।
हैरी जॉन्सन

55

जैसा कि सईस ने उल्लेख किया है, निकास कोड 259 (0x103)का विशेष अर्थ है, इस मामले में प्रक्रिया को डीबग किया जा रहा है।

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


7
अधिक जानकारी .. आमतौर पर थ्रेड पूल के स्वामित्व वाला कोई भी धागा 259 के साथ बाहर निकल जाएगा। देखें: stackoverflow.com/questions/21632584/…
Skrymsli

मैं सोच रहा था कि इसका क्या मतलब है, और आपका जवाब बिल्कुल वही था जो मैं अपने C # कंसोल ऐप को चलाते समय देख रहा था। धन्यवाद!
kayleeFrye_onDeck

0

मेरे साथ क्या हुआ, मेरे समाधान में कई परियोजनाएं हैं। मेरा अभिप्राय प्रोजेक्ट १ को डीबग करना था, हालाँकि, प्रोजेक्ट २ को डिफ़ॉल्ट स्टार्टिंग प्रोजेक्ट के रूप में सेट किया गया था। मैंने इसे ठीक किया, प्रोजेक्ट पर राइट क्लिक किया और "स्टार्टअप प्रोजेक्ट के रूप में सेट करें" चुनें, फिर डिबगिंग चालू करना ठीक है।


1
मैं समस्याओं के रूप में आउटपुट विंडो में डिबगिंग संदेश नहीं देखता। मैं बस उत्सुक था कि वे क्या हैं, उनसे छुटकारा पाने के लिए नहीं।
ओंद्रेज जनसेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.