क्या सी # में सोने के धागे को जगाने का कोई तरीका है? तो, क्या यह लंबे समय तक सो रहा है और जब आप काम संसाधित करना चाहते हैं तो इसे जगाएं?क्या सोने के धागे को जगाने का कोई तरीका है?
उत्तर
एक AutoResetEvent
वस्तु (या किसी अन्य WaitHandle
कार्यान्वयन) सोने के लिए इस्तेमाल किया जा सकता जब तक एक और धागा से एक संकेत प्राप्त होता है:
// launch a calculation thread
var waitHandle = new AutoResetEvent(false);
int result;
var calculationThread = new Thread(
delegate
{
// this code will run on the calculation thread
result = FactorSomeLargeNumber();
waitHandle.Set();
});
calculationThread.Start();
// now that the other thread is launched, we can do something else.
DoOtherStuff();
// we've run out of other stuff to do, so sleep until calculation thread finishes
waitHandle.WaitOne();
यदि आपका धागा Sleep
पर कॉल के अंदर है, तो इसे (आमतौर पर) जागने का कोई तरीका नहीं है। (एकमात्र अपवाद मैं के बारे में पता कर रहा हूँ जावा, जो अगर कुछ अन्य धागा कॉल thread.interrupt()
एक नींद जल्दी समाप्त किया जा करने की अनुमति देता है।)
पैटर्न है कि आप के बारे में बात कर रहे हैं एक घटना के लिए कॉल करने के लिए लगता है: धागा होता है एक लूप, जिस पर यह आग लगने के लिए इंतजार कर रहा है। यदि ईवेंट वर्तमान में सेट नहीं है, तो थ्रेड "सोता है" जब तक कि कुछ अन्य थ्रेड घटना को सक्रिय नहीं करते हैं। उस समय, नींद का धागा उठता है और अगली बार लूप के माध्यम से जब तक यह किसी अन्य घटना की प्रतीक्षा करने के लिए सो जाता है, तब तक अपना काम जारी रखता है।
@ जॉन, आपने अपनी टिप्पणी जोड़ दी, जबकि मैं उस जानकारी को जोड़ने के लिए संपादन कर रहा था :)। –
काफी मेला मैं अपनी टिप्पणी हटा दूंगा :) –
this धागा सहायता होगी? थ्रेड इवेंट हैंडलिंग के लिए सी # good functionality है। मैंने पाइथन में अपना अधिकांश काम किया है, लेकिन सी # थ्रेड अवरुद्ध करने के लिए ठोस पुस्तकालयों में प्रतीत होता है।
सबसे अच्छा समाधान डिफ़ॉल्ट TaskFactory
साथ Task
वस्तुओं का उपयोग करने के लिए होगा। यह एपीआई (.NET 4.0 में पेश की गई) काम-चोरी कतारों और सभी फैंसी सामान के साथ थ्रेड के पूल का उपयोग करती है।
यदि .NET 4.0 उपलब्ध नहीं है, तो ThreadPool
का उपयोग करें, जिसमें एक अंतर्निहित कार्य कतार है (जो कुछ पूल संतुलन करता है लेकिन 4.0 थ्रेड पूल के समान स्कोप पर नहीं)।
यदि आप वास्तव में यह स्वयं करते हैं, तो मैं BlockingCollection<T>
की अनुशंसा करता हूं, जो .NET 4.0 में अवरुद्ध उपभोक्ता/निर्माता कतार है।
तुम सच में चाहिए यह करते हैं अपने आप को और .NET 4.0 उपयोग नहीं कर सकते, तो आप काम का एक lock
-protected कतार के साथ एक ManualResetEvent
या AutoResetEvent
उपयोग कर सकते हैं।
public void WakeUp()
{
if (Thread.CurrentThread.ThreadState == ThreadState.WaitSleepJoin)
Thread.CurrentThread.Interrupt();
}
यह धागा को रोक देगा और इसे जगाएगा नहीं। – Danpe
@ डैनपे मुझे संदेह है कि यह धागे को रोकता है, तो इसे एक बाधा कहने का क्या मतलब होगा। इसे पढ़ें: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt(v=vs.110).aspx आपको अपवाद पकड़ना होगा। –
यह नहीं है कि आप ओपी क्या पूछ रहे हैं उसे पूरा करते हैं। थ्रेड कोड में एक निश्चित "प्रतीक्षा" बिंदु होना चाहिए जहां यह ओएस को थ्रेड प्रोसेसिंग को फिर से प्राप्त करने के लिए संकेत देता है। 'स्लीप' या 'स्पिनवाइट' या 'यील्ड' के लिए कोई भी कॉल थ्रेड को 'वेटस्लीप जॉइन' स्थिति में रखेगा। – Slight
- 1. पायथन: सोने के धागे के लिए दंड
- 2. सोने के लिए सरल, गैर-अवरुद्ध तरीका?
- 3. क्या कोर एनीमेशन को इसके धागे को चलाने के लिए मजबूर करने का कोई तरीका है?
- 4. क्या नियंत्रण के मालिक धागे को खोजने का कोई तरीका है?
- 5. क्यों वर्तमान धागे को ReentrantReadWriteLock के रीड लॉक को जांचने का कोई तरीका नहीं है?
- 6. मुझे इस धागे को सोने के लिए एक तरीका लागू करने की आवश्यकता है जब तक कि यह
- 7. क्या अनिश्चित काल तक धागे को रोकने का कोई तरीका है?
- 8. क्या SQLLataReader को मल्टीथ्रेड करने का कोई तरीका है?
- 9. क्या JDialog के मालिक को बदलने का कोई तरीका है?
- 10. क्या संदर्भ के पते को ढूंढने का कोई तरीका है?
- 11. क्या कोई मुझे धागे समझा सकता है?
- 12. आईफोन को सोने से
- 13. क्या अनिश्चित काल तक एनएसटीएचड को रोकने का कोई तरीका है और इसे किसी अन्य धागे से फिर से शुरू किया गया है?
- 14. एंड्रॉइड डिवाइस के लिए सोने की परिभाषा क्या है?
- 15. क्या ऐसा करने का कोई तरीका है?
- 16. क्या pmap के साथ इस्तेमाल किए गए धागे की संख्या को नियंत्रित करने का कोई तरीका है?
- 17. आपके मुख्य धागे को अवरुद्ध करने वाले कोड को खोजने का सबसे अच्छा तरीका क्या है?
- 18. क्या पैरामीटर को छोड़ने का कोई तरीका है?
- 19. क्या टीएफएस को जोड़ने योग्य बनाने का कोई तरीका है?
- 20. क्या वाईएक्स बिल्ड को तेज करने का कोई तरीका है?
- 21. क्या "रेक मार्ग" को बेहतर बनाने का कोई तरीका है?
- 22. क्या मूसोम घटना को तेज करने का कोई तरीका है?
- 23. क्या एचएटीओएम माइक्रोफॉर्मेट को सत्यापित करने का कोई तरीका है?
- 24. क्या रननेबल को पैरामीटर पास करने का कोई तरीका है?
- 25. डब्ल्यूसीएफ: क्या एक्सटेंशनडेटा फ़ील्ड को निकालने का कोई तरीका है?
- 26. क्या स्ट्रिंग को छोटा करने का कोई और तरीका है?
- 27. क्या configManager.AppSettings को ओवरराइड करने का कोई तरीका है?
- 28. क्या YQL को HTML वापस करने का कोई तरीका है?
- 29. क्या सरलजसन को कम सख्त बनाने का कोई तरीका है?
- 30. क्या TabControl.Items.CurrentChanging को रद्द करने का कोई तरीका है?
वास्तव में कौन सी सेटिंग में? हमें वास्तव में प्लेटफॉर्म और/या थ्रेडिंग मॉडल के बारे में कुछ और जानकारी चाहिए जो आप इसका अर्थपूर्ण उत्तर देने में सक्षम होने के लिए उपयोग कर रहे हैं। – Gian
यह इस बात पर निर्भर करता है कि आप इसे कैसे सोते हैं। – zneak
आपको कम से कम हमें यह बताना होगा कि इस प्रश्न के बारे में प्रोग्रामिंग भाषा क्या है। – scy