2013-03-09 13 views
10

Sto usando curl per inviare POST e GET richieste e utilizzo le funzioni di callback per ottenere le risposte da queste richieste. Queste funzioni callback sono funzioni membro statiche che a loro volta chiamano funzioni membro non statiche (non è possibile utilizzare le funzioni membro non statiche in curl direttamente per questa soluzione alternativa).È curl_easy_perform() sincrono o asincrono?

Poiché queste funzioni di callback non possono restituire un risultato, utilizzo un attributo nella classe C++ per archiviare la risposta. Tutto funziona bene ma ora la mia domanda. Il blocco curl_easy_perform() finché non viene inviata l'intera richiesta E la risposta viene elaborata dalla funzione di richiamata O il mio programma continua dopo curl_easy_perform() e si interrompe in qualche modo quando viene ricevuta la risposta dalla richiesta?

L'importanza per me è che voglio essere sicuro che i dati nel mio attributo che dovrebbero contenere la risposta siano già lì o è possibile che ci siano ancora vecchi dati in questo attributo perché la funzione di callback non ha stato ancora chiamato.

Mi rendo conto che la mia spiegazione non è molto chiara, quindi se non capisci, per favore fammelo sapere e proverò a riformularlo.

Grazie!

+0

Un callback verrà chiamata all'interno della funzione si passa a. –

+0

Quindi vuoi dire che uso improprio la funzione di callback parola? Dico solo a Curl che quando i dati arrivano ha bisogno di passare questi dati a una determinata funzione. Pensavo che fosse anche una funzione di callback. Ma si passa la funzione di callback per arricciarsi in curl_easy_setopt(). Tutte le opzioni per la richiesta vengono impostate prima di curl_easy_perform(). Voglio solo sapere se blocchi curl_easy_perform() fino a quando la richiesta non viene trattata. – Silver

risposta

11

Does curl_easy_perform blocco() fino a quando l'intera richiesta è inviare e la risposta viene elaborato dalla funzione di callback

Sì, questo è esattamente ciò che fa.

(Se invece desiderate un comportamento non-blocking, libcurl's multi interface è la strada da percorrere.)

+0

per favore date un'occhiata alla mia domanda sull'interfaccia 'curl_multi_ *': http://stackoverflow.com/questions/24288513/how-to-do-curl-multi-perform-asynchronously-in-c –

Problemi correlati