मैं बूस्ट प्रोग्रामिंग में नया हूं, और मैं io_service::work
का उपयोग करने का एक कारण ढूंढ रहा हूं, लेकिन मैं इसे समझ नहीं सकता; मेरे कुछ परीक्षणों में मैंने इसे हटा दिया और ठीक काम करता है।मुझे io_service :: कार्य का उपयोग क्यों करना चाहिए?
उत्तर
io_service::run()
ऑपरेशन चलाएगा जब तक कि असीमित संचालन करने के लिए असर हो। यदि, किसी भी समय, कोई एसिंक्रोनस ऑपरेशंस लंबित नहीं है (या हैंडलर को बुलाया जा रहा है), run()
कॉल वापस आ जाएगी।
हालांकि, कुछ डिज़ाइन हैं जो run()
कॉल करना पसंद नहीं करते हैं जब तक कि सभी काम नहीं किए जाते हैं और io_service
स्पष्ट रूप से निर्देश दिया गया है कि बाहर निकलना ठीक है। io_service::work
के लिए इसका उपयोग किया जाता है। work
ऑब्जेक्ट (मैं आमतौर पर इसे ढेर और साझा_प्टर पर करता हूं) बनाकर, io_service को हमेशा कुछ लंबित मानता है, और इसलिए run()
विधि वापस नहीं आती है। एक बार जब मैं सेवा से बाहर निकलने में सक्षम होना चाहता हूं (आमतौर पर शटडाउन के दौरान), तो मैं कार्य ऑब्जेक्ट को नष्ट कर दूंगा।
io_service::work
, सभी काम करता है कि io_service
का एक उदाहरण के लिए तैनात कर सकते हैं जब आप एक सॉकेट के साथ काम कर रहे हैं और एक अतुल्यकालिक पढ़ने शुरू उदाहरण के लिए, के आधार वर्ग है वास्तव में आप io_service
करने के लिए एक work
जोड़ रहे हैं। तो आप सामान्य रूप से work
सीधे का उपयोग कभी नहीं, लेकिन इसके लिए एक अपवाद है:
io_service::run
जैसे ही वहाँ ऐसा करने के लिए कोई और अधिक काम है के रूप में वापस आ जाएगी, इसलिए कुछ उत्पादक और उपभोक्ता धागे है कि एक आवेदन पत्र पर विचार, उत्पादकों कभी कभी काम करता है उत्पादन और उन्हें io_service::post
के साथ उपभोक्ता धागे पर पोस्ट करें, लेकिन यदि सभी काम समाप्त हो गए हैं, तो io_service::run
वापस आ जाएगा और संभवतः आपका उपभोक्ता धागा बंद हो जाएगा, इसलिए आपको io_service
व्यस्त रखने के लिए मनमाने ढंग से काम करने की आवश्यकता है, इस मामले में आप सीधे io_service::work
का उपयोग कर सकते हैं।
- 1. मुझे फ्लेक्स का उपयोग क्यों करना चाहिए?
- 2. मुझे एमएक्सएमएल का उपयोग क्यों करना चाहिए?
- 3. मुझे ईएमएफ का उपयोग क्यों करना चाहिए?
- 4. मुझे गिटिनोरोर का उपयोग क्यों करना चाहिए?
- 5. मुझे डिस्पैचर का उपयोग क्यों करना चाहिए?
- 6. मुझे डोलॉल्स का उपयोग क्यों करना चाहिए?
- 7. मुझे glbindAttribLocation का उपयोग क्यों करना चाहिए?
- 8. मुझे @properties का उपयोग क्यों करना चाहिए?
- 9. मुझे यूनिवर्सल :: आईएसए का उपयोग क्यों नहीं करना चाहिए?
- 10. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 11. मुझे पैरामीटर का उपयोग कब करना चाहिए?
- 12. मुझे सदस्य प्रारंभिक सूची का उपयोग क्यों करना चाहिए?
- 13. मुझे HTML में कंटेनर div का उपयोग क्यों करना चाहिए?
- 14. मुझे WPF में "संसाधन" का उपयोग क्यों करना चाहिए?
- 15. मुझे दृश्य मॉडल का उपयोग क्यों करना चाहिए?
- 16. मुझे जीडब्ल्यूटी के बजाय jQuery का उपयोग क्यों करना चाहिए?
- 17. मुझे @ url.Content ("~/blah-blah-blah") का उपयोग क्यों करना चाहिए?
- 18. मुझे एमवीसी के साथ डब्ल्यूसीएफ का उपयोग क्यों करना चाहिए?
- 19. मुझे पीएनजी का उपयोग क्यों करना चाहिए, न कि जेपीजी?
- 20. मुझे एंड्रॉइड में खंड का उपयोग क्यों करना चाहिए?
- 21. मुझे अर्धविराम का उपयोग क्यों नहीं करना चाहिए?
- 22. मुझे जीएसी का उपयोग क्यों नहीं करना चाहिए?
- 23. मुझे रेल पर रूबी का उपयोग क्यों करना चाहिए?
- 24. मुझे जावा लेबल स्टेटमेंट का उपयोग क्यों करना चाहिए?
- 25. क्या मुझे FxCop का उपयोग करना चाहिए और क्यों?
- 26. मुझे फ़ीचर संचालित विकास का उपयोग क्यों करना चाहिए?
- 27. मुझे सीखना और स्ट्रैट्स का उपयोग क्यों करना चाहिए?
- 28. मुझे sybase में GO कमांड का उपयोग क्यों करना चाहिए?
- 29. मुझे एकता का उपयोग क्यों नहीं करना चाहिए?
- 30. मुझे Silverlight ऐप में एमवीवीएम का उपयोग क्यों करना चाहिए?
रीसेट() का उपयोग करने की तरह नष्ट करें? – lucastamoios
आमतौर पर, यदि मैं काम करने के लिए shared_ptr का उपयोग करता हूं, तो हाँ, मैं shared_ptr पर 'रीसेट() 'को कॉल करता हूं। –