मैंने धागे की एक सरणी बनाई है और उन सभी को शुरू किया है। कैसे पता चलेगा कि सभी धागे काम पूरा कर चुके हैं या नहीं। मैं thread.wait या thread.join का उपयोग नहीं करना चाहता।थ्रेड के एक ऐरे को पूरा करने का पता लगाने
उत्तर
ठीक है, आप परीक्षण Thread.IsAlive
परीक्षण कर सकते हैं - लेकिन जैसे ही आपने इसका परीक्षण किया है, उतना ही पुराना हो जाएगा। आप "वर्तमान में जिंदा" धागे की एक सूची रख सकते हैं, और जब वे रुकते हैं, तो परीक्षण रनों के बीच सोते समय उन्हें हटा दें। अधिक विस्तृत जानकारी के लिए आप Thread.ThreadState
का उपयोग कर सकते हैं।
यहां बड़ी तस्वीर क्या है? आप क्या हासिल करने की कोशिश कर रहे हैं, और आप Thread.Join
(संभावित रूप से टाइमआउट के साथ) क्यों नहीं कॉल करना चाहते हैं?
यदि आप .NET 4 का उपयोग कर रहे हैं तो आप Task Parallel Library और ContinueWhenAll विधि का उपयोग कर सकते हैं।
आपको Task के रूप में प्रतिनिधित्व करने के लिए अपने धागे को संशोधित करना होगा। कार्य तब धागे के साथ काम करना आसान है। आम तौर पर आपको निचले स्तर की चीजों के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि आपको शेड्यूलिंग या चीजों को पूरा करने की प्रतीक्षा करने के लिए मजबूर होना पड़ता है।
किस अंत तक? निदान? Console.WriteLine।
यदि नहीं, तो वैश्विक चर (जैसे: सभी धागे तक पहुंच योग्य) का उपयोग करें, जब आपके धागे में से एक शुरू होता है, तब यह बढ़ता है जब यह समाप्त होता है। यदि 0, सभी धागे ने काम पूरा कर लिया है, लेकिन आपको इसे सही तरीके से सिंक्रनाइज़ करने के लिए सावधान रहना चाहिए अन्यथा आपको झूठी सकारात्मक चीज़ें मिलेंगी। आप शुरू के बाद आप धागे एक कार्य करें:
while (runningThreadsCount > 0)
{
// There are still working threads
}
क्या MyThread.ThreadState == System.Threading.ThreadState.Stopped के बारे में?
यह होना चाहिए '(MyThread.ThreadState और System.Threading.ThreadState.Stopped) == सिस्टम। थ्रेडिंग। थ्रेडस्टेट।'थ्रेडस्टेट' में फ्लैगएट्रिब्यूट के बाद से रोक दिया गया है और इस प्रकार अधिक मूल्य "हो सकता है"। – Patrick
आप किसी सरणी के बजाय थ्रेडपूल क्लास का उपयोग कर सकते हैं, और यह जांचने के लिए 'GetAvailableThreads' विधि का उपयोग कर सकते हैं कि सभी थ्रेड उपलब्ध हैं या नहीं। देखें:
धागे वापस वर्ग है कि आप उन्हें शुरू करने के लिए फोन में संकेत करने के लिए है कि वे
किया जाता है अगर आप काम रोकना एसिंक्रोनस रूप से आप जो सभी के एक RunWorkerCompleted घटना है और एक त्रुटि है BackgroundWorkers उपयोग कर सकते हैं चाहते हैं और घटना args
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
- 1. .NET में क्रॉस थ्रेड एक्सेस का पता लगाने के लिए कैसे करें (थ्रेड एफ़िनिटी लागू करें)?
- 2. आवाज का पता लगाने
- 3. का पता लगाने और वाईफाई
- 4. एक बफर ओवरफ्लो का पता लगाने
- 5. पायथन एक विभाजन गलती का पता लगाने
- 6. UITouch आंदोलन को गति का पता लगाने
- 7. JComboBox संपादन का पता लगाने
- 8. का पता लगाने और अजगर
- 9. छवि किनारे का पता लगाने
- 10. का पता लगाने जब डेटा
- 11. उपयोगकर्ता गतिविधि का पता लगाने
- 12. ओपनसीवी हाथ का पता लगाने?
- 13. UIScrollView स्थिति का पता लगाने
- 14. आकृति का पता लगाने - ओपनसीवी
- 15. सी # का पता लगाने के पृष्ठ रीडायरेक्ट
- 16. ईमेल क्लाइंट का पता लगाने
- 17. openCV का पता लगाने रोशनी
- 18. रेखा का पता लगाने | जावा
- 19. किसी एप्लिकेशन के लॉन्च का पता लगाने
- 20. माउस सूचक का पता लगाने
- 21. ओपनसीवी त्वचा का पता लगाने
- 22. का पता लगाने अगर रंग
- 23. गति का पता लगाने वीएलसीजे
- 24. घोस्टस्क्रिप्ट रंग का पता लगाने
- 25. टीटीएस (कॉलबैक) एंड्रॉइड के पूरा होने का पता लगाने में असमर्थ।
- 26. जावास्क्रिप्ट का पता लगाने के मान्य तिथियां
- 27. चिपमंक टकराव का पता लगाने
- 28. का पता लगाने के SimpleXML सरणी संपत्ति
- 29. सी टेम्प्लेटेड वर्ग का पता लगाने के ++
- 30. भौगोलिक क्लस्टर का पता लगाने
में रद्द कर दिया गया गुण आप सभी आपकी मदद के लिए धन्यवाद। मैंने थ्रेडकाउंट का इस्तेमाल किया और यह मेरी समस्या हल हो गई। मैंने लूप के दौरान किया था: { कंसोल। राइटलाइन ("धागे की संख्या: {0}", ImageCompute.threadCount); } जबकि (! (ImageCompute.threadCount == 0)); लेकिन, यह धागे की संख्या गिनने की तरह है। लेकिन क्या हमारे पास कॉलबैक फ़ंक्शंस की तरह कुछ है। एक बार पूरा होने के बाद हम प्रत्येक थ्रेड और ट्रिगर को संलग्न कर सकते हैं। एक बार फिर धन्यवाद। – Harsha
यह दृष्टिकोण दौड़ की स्थिति के लिए प्रवण है क्योंकि एक पूर्णांक में वृद्धि और कमी एक परमाणु संचालन नहीं है (इसमें एक पढ़ना और लिखना शामिल है)। दो धागे एक ही मूल्य को पढ़ सकते हैं, इसे कम कर सकते हैं और इसे वापस लिख सकते हैं, चलने के कारण थ्रेड्स काउंटर कभी नहीं बनने के लिए 0. –
@ हरशा यदि आप थ्रेड समाप्त होने पर लगातार काम करना चाहते हैं, तो टास्क समांतर लाइब्रेरी पर एक नज़र डालें (मेरी जांच करें जवाब देने के)। –