2013-04-29 10 views
8

il codice di esempio al solito per l'utilizzo di HTTPClientSession più o meno così:Async letto da Poco 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); 

la domanda è: come posso leggere dall'ingresso rs streaming tutti i dati, facendo in modo che tutti i le operazioni non sono bloccanti, quindi posso cancellarle in qualsiasi momento?

+0

Hai trovato alcuna soluzione per questo? – UVV

risposta

3

Solo un'idea, prova a inserire il codice in una discussione.

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

saluti

+0

come potrebbe essere d'aiuto? Vorrei solo ottenere questo nuovo thread bloccato per un tempo indefinito –

+1

Se metti session.receiveResponse() all'interno di un thread, non dovresti preoccuparti se è bloccato o meno perché puoi eseguire il tuo codice principale in thread separati . Se si desidera annullare la sezione di blocco, è possibile interrompere il thread o interromperlo in modo ordinato. Ad esempio, per scambiare dati tra thread, utilizzare riferimenti/puntatori o code sincronizzate con mutex. Se si desidera bloccare receiveResponse() per un certo tempo, è necessario cercare Time-Alives (metodo setKeepAliveTimeout) e timeout. Buona fortuna –

+0

Ok, quindi prova con il metodo HTTPClientSession :: setKeepAliveTimeout() per configurare un TimeOut piccolo per la tua connessione corrente. Dalla documentazione, "Il flusso è valido finché non viene chiamato sendRequest() o la sessione viene distrutta", quindi se il tuo flusso rs non riceve nulla per un periodo di tempo, dovrebbe continuare senza problemi. –