2014-11-24 3 views
5

cURL Version/OS in Frage ist 7.15 und Red Hat 5, diese sind in Stein gesetzt, obwohl so nicht ändern können.libcURL Fortschritt Funktion wird nicht aufgerufen

Die tatsächliche Fortschritt Funktion, die bei allen

nicht
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; 
} 

Der Setup-Code aufgerufen wird:

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) 

Wo CurlUtil die Klasse ist, dass der Code in der CURLOPT_DEBUGFUNCTION funktioniert gut und ist. in der gleichen Funktion auf die gleiche Weise eingerichtet.

+1

Sind Sie 100% sicher, dass Daten tatsächlich übertragen werden? Es kann auch nicht aufgerufen werden, wenn die Übertragung zu schnell ist. Ist 'progressCallback' statisch? –

+2

Wenn 'progressCallback()' nicht als 'statisch' deklariert ist, muss es sein. Sie können eine nicht statische Klassenmethode nicht als Rückruf verwenden (es sei denn, Sie wickeln sie in einen Thunk). –

+0

... und wenn die Kommentare von Remy oder Collin gültig sind, ist die Frage falsch ... –

Antwort

1

das Problem ist mit Aufruf Konvention der Rückruffunktion. Es muss __cdecl oder/Gd Option für gcc Compiler sein. Bitte überprüfen Sie die Compileroptionen, wenn die Funktion bereits statisch ist. C++ - Memberfunktionen werden mit diesen Aufrufkonventionen aufgerufen. Blick auf den folgenden Link, vorgesehen, mehr sauberer Weg, wenn Sie haben Klasse wollen, die für den Umgang mit Übertragungsstatus und Statistiken verantwortlich: How can I use a member function pointer in libcurl

PS: Meine bearbeiten war langsamer als ich Kreuz Verifizieren war. Daher Buchung als Antwort.

Verwandte Themen