मेरे पास एक पृष्ठभूमि धागा है जो काम का एक गुच्छा कर रहा है - एप्लिकेशन लोड हो रहा है। मुख्य धागा UIProgressView पर प्रगति प्रदर्शित कर रहा है।एक धागा कैसे निर्धारित कर सकता है कि एक अलग धागा दुर्घटनाग्रस्त हो गया है?
पृष्ठभूमि धागा performSelectorInBackground साथ पैदा की जा रही है (हालांकि, मैं इस विधि के लिए शादी नहीं कर रहा हूँ अगर एक अलग दृष्टिकोण इस समस्या को हल करने के लिए आसान बनाता है)
[self performSelectorInBackground:@selector(loadAppInBackground) withObject:self];
एक जोड़े अवसरों पर एक बग का कारण है पृष्ठभूमि थ्रेड क्रैश करने के लिए (ऐप के रूप में अलग-अलग बग) जिसके परिणामस्वरूप प्रगति पट्टी रोकती है, लेकिन उपयोगकर्ता को कोई स्पष्ट संकेत नहीं मिलता है कि कुछ भी गलत है।
मैं इस स्थिति का पता लगाना चाहता हूं और उपयोगकर्ता प्रतीक्षा करने तक बस लटकने से अधिक प्रसन्नतापूर्वक विफल रहता हूं।
क्योंकि लोड प्रक्रिया की अवधि काफी भिन्न हो सकती है, बस समय समाप्त करना एक आदर्श विकल्प नहीं है।
अग्रभूमि धागे का पता लगाने के लिए सबसे अच्छा तरीका क्या है कि पृष्ठभूमि धागा विफल हो गया है? चूंकि फोरग्राउंड थ्रेड यूआई से निपटने में व्यस्त है, तो क्या पहले की निगरानी करने के लिए इसे दूसरी पृष्ठभूमि थ्रेड की आवश्यकता होगी? वह बदसूरत लगता है।
क्या कुछ थ्रेड-टू-थ्रेड संचार तंत्र है जिसका उपयोग पृष्ठभूमि प्रक्रिया को "पिंग" करने के लिए किया जा सकता है? बेहतर अभी तक, अन्य धागे की स्थिति की जांच करने के लिए निम्न स्तर की प्रणाली तंत्र?
डीबगर को चल रहे सभी थ्रेड के बारे में पता है ... और उनकी स्थिति पता है। मैं सोच रहा हूं कि मेरे ऐप को ऐसा करने के लिए कोई कॉल उपलब्ध है या नहीं।
आप इस पृष्ठभूमि के काम को कैसे प्रेषित कर रहे हैं (जीसीडी, एनएसओपरेशंस, एनएसटीएचडीएस)? जवाब आपके कार्यान्वयन पर निर्भर करता है। – CodaFi
[स्वयं प्रदर्शन चयनकर्ताबैकग्राउंड: @ चयनकर्ता (loadAppInBackground) ऑब्जेक्ट: स्वयं]; –
टाइमआउट ज्यादातर उपयोग की जाने वाली तकनीक है। क्योंकि यह निर्धारित करना असंभव है कि धागा सामान्य रूप से या अनंत लूप (समस्या को रोकना) में चल रहा है या नहीं। तो आपका अग्रभूमि जांच सकता है कि पृष्ठभूमि कार्य 1 सेकंड (स्थानीय I/O, या नेटवर्क I/O के लिए 15 ~ 60 सेकंड) में पूरा हुआ है या नहीं। क्षमा करें, मैं केवल एक अस्पष्ट सुझाव दे सकता हूं क्योंकि आप एक सामान्य समस्या पूछ रहे हैं। – HKTonyLee