2014-11-24 20 views
5

問題的cURL版本/操作系統是7.15和Red Hat 5,儘管如此,它們仍然無法改變它們。libcURL Progress函數不被調用

它不會被調用所有

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

設置代碼中的實際進度功能:

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) 

哪裏CurlUtil的是,在存在代碼的類的CURLOPT_DEBUGFUNCTION工作正常,併爲。以相同的方式設置完全相同的功能。

+1

您是否確實正在傳輸數據?如果轉移太快,也可能不會被調用。 'progressCallback'是靜態的嗎? – 2014-11-25 00:12:16

+2

如果'progressCallback()'沒有被聲明爲'static',它就需要。您不能使用非靜態類方法作爲回調(除非將其包裝在thunk中)。 – 2014-11-25 00:26:23

+0

...並且如果Remy或Collin的評論有效,則問題是錯誤的... – 2014-11-25 07:23:15

回答

1

問題在於調用回調函數的約定。它需要爲gcc編譯器使用__cdecl或/ Gd選項。如果函數已經是靜態的,請檢查編譯器選項。這個調用約定會調用C++成員函數。 How can I use a member function pointer in libcurl

PS: 請看下面的鏈接,它,如果你想擁有類,它是負責處理傳輸狀態和統計數據提供了更清潔的方式我的編輯是比較慢,因爲我是交叉驗證。因此張貼爲答案。