2013-04-29 7 views
8

HTTPClientSession प्रयोग करने के लिए हमेशा की तरह नमूना कोड कुछ इस तरह चला जाता है:Async पोको HTTPClientSession से पढ़ा

Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort()); 
std::ostream& ostr = session.sendRequest(req); 

// Receive the response. 
Poco::Net::HTTPResponse res; 
std::istream& rs = session.receiveResponse(res); 

सवाल यह है कि, मैं कैसे रु इनपुट से पढ़ सकते हैं पूरे डेटा स्ट्रीम है, जबकि यह सब सुनिश्चित करते हुए संचालन गैर-अवरुद्ध हैं, ताकि मैं उन्हें किसी भी समय रद्द कर सकूं?

+0

आप इस के लिए किसी भी समाधान मिला? – UVV

उत्तर

3

बस एक विचार है, अपना कोड थ्रेड के अंदर डालने का प्रयास करें।

http://pocoproject.org/slides/130-Threads.pdf

सादर

+0

यह कैसे मदद करेगा? मैं इस नए थ्रेड को अनिश्चित अवधि के लिए अवरुद्ध कर दूंगा –

+1

यदि आप अपना सत्र .receiveResponse() को थ्रेड के अंदर रखते हैं, तो आपको चिंता नहीं करनी चाहिए कि यह अवरुद्ध है या नहीं, क्योंकि आप अपना मुख्य कोड अलग थ्रेड में चला सकते हैं । यदि आप अवरुद्ध अनुभाग को रद्द करना चाहते हैं, तो आप थ्रेड को मार सकते हैं या आदेशित तरीके से इसे रोक सकते हैं। थ्रेड के बीच डेटा का आदान-प्रदान करने के लिए उदाहरण के लिए mutexes के साथ सिंक्रनाइज़ किए गए संदर्भ/पॉइंटर्स या कतार का उपयोग करें। यदि आप एक समय के लिए getResponse() को अवरुद्ध करना चाहते हैं तो आपको टाइम-एलीव्स (setKeepAliveTimeout विधि) और टाइमआउट देखना चाहिए। शुभकामनाएं –

+0

ठीक है, फिर अपने वर्तमान कनेक्शन के लिए एक छोटा टाइमऑट कॉन्फ़िगर करने के लिए HTTPClientSession :: setKeepAliveTimeout() विधि के साथ प्रयास करें। दस्तावेज़ीकरण से, "धारा तब तक वैध है जब तक sendRequest() को कॉल नहीं किया जाता है या सत्र नष्ट हो जाता है", इसलिए यदि आपकी आरएस स्ट्रीम को समय अवधि के लिए कुछ भी प्राप्त नहीं होता है, तो इसे बिना किसी समस्या के जारी रखना चाहिए। –

संबंधित मुद्दे