2013-04-29 53 views
8

使用HTTPClientSession通常的示例代碼是這樣的:異步從波科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); 

的問題是,我如何才能從RS輸入讀取流的整個數據,同時確保所有的操作是非阻塞的,以便我可以隨時取消它們?

+0

你有沒有發現這方面的任何解決方案? – UVV 2015-01-09 16:11:46

回答

3

只是一個想法,嘗試把你的代碼放入一個線程。

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

問候

+0

這將如何幫助?我只是讓這個新的線程無限期地被阻塞 – 2013-04-30 09:09:55

+1

如果你把你的session.receiveResponse()放入一個線程中,你不應該擔心它是否阻塞,因爲你可以在分離線程中運行你的主代碼。如果你想取消阻塞部分,你可以殺死線程或者以有序的方式停止線程。爲了在線程之間交換數據,例如使用與互斥體同步的引用/指針或隊列。如果您想暫時阻止receiveResponse(),您應該查看Time-Alives(setKeepAliveTimeout方法)和超時。好運 – 2013-04-30 10:34:58

+0

好的,然後嘗試HTTPClientSession :: setKeepAliveTimeout()方法爲您的當前連接配置一個小的TimeOut。從文檔中,「流被調用,直到sendRequest()被調用或會話被銷燬」,所以如果你的rs流在一段時間內沒有收到任何東西,它應該繼續沒有問題。 – 2013-04-30 14:47:19