2014-11-24 14 views
5

versione in cURL/sistema operativo in questione è 7.15 e Red Hat 5, questi sono impostati in pietra ma non possono quindi essere modificati.La funzione di avanzamento di libcURL non viene chiamata

La funzione effettiva progresso che non viene chiamato a tutto il codice

int CurlUtil::progressCallback(void *clientp, double dltotal, double dlnow, 
          double ultotal, double ulnow) 
{ 
    DEFN_METHOD_NAME("progressCallback"); 
    EX_ENTRY_EXIT(); 

    EX_DEBUG("Total downloaded " << dlnow << "/" << dltotal); 
    EX_DEBUG("Total uploaded " << ulnow << "/" << ultotal); 

    CurlUtil* curlUtil = (CurlUtil*)clientp; 

    // If you return anything but 0, curl will abort transfer 
    return (true == curlUtil->killed()) ? 1 : 0; 
} 

Il setup:

curl_easy_setopt(m_curl, CURLOPT_NOPROGRESS, 0); 
curl_easy_setopt(m_curl, CURLOPT_PROGRESSFUNCTION, CurlUtil::progressCallback); 
curl_easy_setopt(m_curl, CURLOPT_PROGRESSDATA, this) 

Dove CurlUtil è la classe che il codice esistente nella CURLOPT_DEBUGFUNCTION funziona bene ed è. impostare esattamente la stessa funzione allo stesso modo.

+1

Sei sicuro al 100% dei dati che vengono effettivamente trasferiti? Inoltre, potrebbe non essere chiamato se il trasferimento è troppo veloce. È 'progressCallback' statico? –

+2

Se 'progressCallback()' non è dichiarato come 'statico', deve essere. Non è possibile utilizzare un metodo di classe non statico come callback (a meno che non lo si avvolga in un thunk). –

+0

... e se i commenti di Remy's o Collin sono validi, la domanda è errata ... –

risposta

1

il problema è con la convenzione di chiamata della funzione di richiamata. Ha bisogno di __cdecl o/Gd option per i compilatori gcc. Controlla le opzioni del compilatore se la funzione è già statica. Le funzioni membro C++ vengono chiamate con queste convenzioni di chiamata di chiamata. sguardo al seguente link, ha fornito modo più pulito, se si vuole avere classe che è responsabile della gestione dello stato di trasferimento e le statistiche: How can I use a member function pointer in libcurl

PS: la mia modifica è stata più lenta come mi è stato la verifica incrociata. Quindi postare come risposta.

Problemi correlati