NSOperation
के लिए [NSOperationQueue currentQueue]
या [NSThread currentThread]
के बराबर है?वर्तमान में निष्पादित NSOperation को कैसे पकड़ें?
मेरे पास एक काफी जटिल डोमेन मॉडल है जहां भारी स्टैक कॉल स्टैक में काफी गहराई से होता है। एक ऑपरेशन को समय पर रद्द करने के लिए मुझे NSOperation
को प्रत्येक विधि के पैरामीटर के रूप में पास करने की आवश्यकता होगी जब तक कि मैं उस बिंदु तक नहीं पहुंच जाता जहां मैं लंबे समय तक चलने वाले लूप को बाधित करना चाहता हूं। धागे का उपयोग करके मैं [[NSThread currentThread] isCancelled]
का उपयोग कर सकता हूं, इसलिए यदि एनएसओपरेशन के बराबर है तो यह सुविधाजनक लगेगा, दुर्भाग्यवश केवल उबाऊ [NSOperationQueue currentQueue]
है।
-1 मुझे डर लग रहा। इनमें से कोई भी काम करने जा रहा है। ऑपरेशन की स्थापना करना रद्द की गई संपत्ति का कोई प्रभाव नहीं पड़ेगा जब तक कि ऑपरेशन समय-समय पर रद्द की गई संपत्ति की जांच न करे। निश्चित रूप से केवीओ काम नहीं करेगा क्योंकि केवीओ अधिसूचनाएं उसी धागे पर प्राप्त की जाती हैं जिन्हें वे भेजे जाते हैं। – JeremyP
एरर ... क्या आपने इसे नीचे पोस्ट करने से पहले अपनी पोस्ट पढ़ी? इन गुणों का निरीक्षण करना * बिल्कुल * ये चीजें कैसे की जाती हैं। आप मुख्य परिवर्तन पर करने की आवश्यकता वाले कुछ भी करने के लिए राज्य परिवर्तन का उपयोग करते हैं, फिर -फॉर्म चयनकर्ताऑनमेन थ्रेड ... का उपयोग करें। "इनमें से कोई भी काम नहीं करेगा" मेरे लिए खबर है क्योंकि मेरे पास बहुत से ऐप्स हैं। इसके अलावा, मैंने कभी नहीं कहा * रद्दीकरण * सेट करें। असल में मैंने विशेष रूप से कहा कि कतार ऑपरेशन रद्द कर देती है और ऑपरेशन समय-समय पर इस स्थिति की जांच करता है और सत्य होने पर काम करना बंद कर देता है। –
क्या होता है: कतार ऑप्स को रद्द करता है -> ओपी पोस्ट केवीओ नोट को रद्द कर दिया जाता है, स्वयं को रोकता है -> पर्यवेक्षक (आपके कुछ नियंत्रक) नोट्स बदलते हैं, और यदि काम करने के लिए काम है, तो यह मुख्य थ्रेड पर करता है। हर समय काम करता है। सिर्फ इसलिए कि आपका नियंत्रक किसी अन्य थ्रेड पर मैसेज किया गया है इसका मतलब यह नहीं है कि यह इसे संभाल नहीं सकता है। अगर इसे मुख्य धागे पर कुछ करना है, तो आगे बढ़ें और मुख्य धागे पर खुद को कुछ भेजें। –