【发布时间】:2015-01-22 20:12:43
【问题描述】:
有问题的 cURL 版本/操作系统是 7.15 和 Red Hat 5,这些都是一成不变的,但无法更改。
根本没有被调用的实际进度函数
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 工作正常,并且以相同的方式在完全相同的函数中设置。
【问题讨论】:
-
您是否 100% 确定实际正在传输数据?如果传输太快,也可能不会调用它。
progressCallback是静态的吗? -
如果
progressCallback()未声明为static,则需要声明。您不能将非静态类方法用作回调(除非您将其包装在 thunk 中)。 -
...如果 Remy's 或 Collin's cmets 有效,则问题是错误的...
-
正在传输数据,函数声明为静态。我已经尝试了公共和私人的功能,但它们都没有被调用。