क्या किसी के पास उदाहरणों के लिए एक अच्छा सूचक है जो futures from the Boost thread libraryBoost ASIO के साथ उपयोग करता है? मेरे पास एक मौजूदा एसिंक्रोनस लाइब्रेरी है जो कॉलबैक फ़ंक्शन का उपयोग करती है जिसे मैं एक मित्रवत सिंक्रोनस इंटरफ़ेस प्रदान करना चाहता हूं।बूस्ट के साथ वायदा का उपयोग :: asio
उत्तर
मौजूदा एसिंक्रोनस लाइब्रेरी के साथ बातचीत को समझे बिना संक्षिप्त समाधान प्रदान करना मुश्किल है। फिर भी, यह answer सक्रिय ऑब्जेक्ट पैटर्न को लागू करने के लिए Boost.Future और Boost.Asio का उपयोग करता है। जब creating a future
, यह निर्धारित करने के दृष्टिकोण और अधिक उपयुक्त है मौजूदा अतुल्यकालिक पुस्तकालय की जांच पर विचार करें:
- boost::packaged_task एक functor है कि एक
future
बना सकते हैं प्रदान करता है। इस मज़ेदार को Boost.Asioio_service
के संदर्भ में निष्पादित किया जा सकता है। मौजूदा एसिंक्रोनस लाइब्रेरी के साथ-साथ रैवल्यू सेमेन्टिक्स के आसपास काम करने के लिए कुछ अतिरिक्त स्तर की रैपिंग की आवश्यकता हो सकती है। इस फ़ंक्शन का उपयोग करने पर विचार करें यदि वर्तमान फ़ंक्शन कॉल पहले से ही मान वापस कर देता है। - boost::promise एक निम्न स्तर की वस्तु प्रदान करता है जिसका मूल्य निर्धारित हो सकता है। इसे मौजूदा कार्यों को संशोधित करने की आवश्यकता हो सकती है,
promise
को तर्क के रूप में स्वीकार करने की आवश्यकता है, और इसे फ़ंक्शन के भीतर पॉप्युलेट करें।promise
Boost.Asioio_service
को प्रदान किए गए हैंडलर से बाध्य होगा। के साथ, इसे रावल्यू सेमेन्टिक्स से निपटने के लिए रैपिंग के अतिरिक्त स्तर की आवश्यकता हो सकती है।
अंत में, Boost.Asio 1.54 (बीटा में), C++ futures के लिए प्रथम श्रेणी के सहायता प्रदान करता है। आधिकारिक example यहां है। यहां तक कि यदि आप वर्तमान में 1.54 बीटा का उपयोग करने में असमर्थ हैं, तो यह इंटरफ़ेस और कार्यान्वयन की जांच करने के लिए फायदेमंद हो सकता है।
आप इस उदाहरण को देखो कृपया:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/example/cpp11/futures/daytime_client.cpp
इससे पता चलता है बढ़ावा asio साथ std::future
का उपयोग कैसे करें।
#include <boost/asio/use_future.hpp>
तो फिर तुम उस तरह कोड लिख सकते हैं::
std::future<std::size_t> my_future =
my_socket.async_read_some(my_buffer, boost::asio::use_future);
आप boost::future
उपयोग करने के लिए तो मैं एक और संस्करण लागू करने के लिए सुझाव देंगे की जरूरत है
प्रमुख मुद्दा फ़ाइल use_future.hpp
शामिल करने के लिए है , boost::asio::use_future
के समान।
फ़ाइल use_future.hpp
उस के लिए एक अच्छा उदाहरण है।
- 1. बूस्ट के साथ काम करना :: asio :: streambuf
- 2. बूस्ट Asio serial_port - आईओ
- 3. बूस्ट :: asio :: read_async
- 4. बूस्ट Asio message_flags
- 5. बूस्ट asio deadline_timer
- 6. बूस्ट asio io_service.run()
- 7. बूस्ट asio io_service प्रेषण बनाम
- 8. बूस्ट :: asio async_wait हैंडलर हस्ताक्षर
- 9. बूस्ट में लिखने() के साथ कच्चे डेटा भेजना :: asio
- 10. बूस्ट में async_read() में EOF :: asio
- 11. बूस्ट में गतिशील थ्रेड पूल का उदाहरण :: asio
- 12. AF_NETLINK (नेटलिंक) सॉकेट का उपयोग बूस्ट :: एएसआई
- 13. क्या मैं एकाधिक बूस्ट सॉकेट के लिए एक ही बूस्ट :: asio :: io_service का उपयोग कर सकता हूं?
- 14. वायदा
- 15. क्या std :: bind boost :: asio के साथ संगत होना चाहिए?
- 16. कैसे asio साथ std :: स्ट्रिंग का उपयोग करना :: बफर()
- 17. सी ++ मॉक/टेस्ट बूस्ट :: asio :: io_stream- आधारित असिंच हैंडलर
- 18. बूस्ट का "cstdint" उपयोग
- 19. बूस्ट asio udp सॉकेट async_receive_from हैंडलर को कॉल नहीं करता
- 20. बूस्ट async_write को boost const_buffers के वेक्टर के साथ सही तरीके से कैसे उपयोग करें?
- 21. बूस्ट :: asio इस तरह की अजीब कोडिंग शैली क्या है?
- 22. बूस्ट लाइब्रेरी
- 23. बूस्ट पर सिंक्रोनस पढ़ने को अनब्लॉक करें :: asio :: serial_port
- 24. बूस्ट asio async_write: async_write कॉल को अंतःस्थापित नहीं करना है?
- 25. "कनेक्शन कम" बूस्ट पर कनेक्ट करें :: asio :: ip :: udp :: सॉकेट
- 26. व्यक्तिगत बूस्ट पुस्तकालयों के साथ संकलन, बूस्ट
- 27. बूस्ट :: विभिन्न बूस्ट संस्करणों के साथ TIME_UTC (_)
- 28. डिवाइस फ़ाइलों के साथ एएसओ का उपयोग कैसे करें
- 29. Boost :: Asio
- 30. बूस्ट :: transform_iterator के साथ फीनिक्स अभिव्यक्ति का उपयोग कैसे करें?
यह कभी काम नहीं करता है, यह हमेशा के लिए – madduci
को अवरुद्ध करने का कारण बनता है, इस तरह के समाधान सक्रिय रूप से मेरे प्रोजेक्ट पर उपयोग किया जाता है। और यह काम करता है। क्या आप वाकई अपने मामले में एएसओ को अवरुद्ध करने का कारण जानते हैं? –
जाहिर है कि उदाहरण में कोड प्रत्येक भविष्य पर ब्लॉक करता है। अगर आप सिर्फ प्रत्येक पर ब्लॉक करते हैं तो वायदा का उपयोग करने का क्या मतलब है? साथ ही साथ पहले स्थान पर अवरुद्ध कोड का उपयोग कर सकते हैं ... – kralyk