libcURL Progress函数未被调用

时间:2014-11-24 23:45:12

标签: c++ libcurl

有问题的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工作正常,并以相同的方式设置在完全相同的函数中。

1 个答案:

答案 0 :(得分:1)

问题在于调用回调函数的约定。对于gcc编译器,它需要__cdecl或/ Gd选项。如果函数已经是静态的,请检查编译器选项。使用thiscall调用约定调用C ++成员函数。 查看以下链接,如果您希望有一个负责处理传输状态和统计信息的类,它提供了更清晰的方法: How can I use a member function pointer in libcurl

PS:我在交叉验证时编辑速度较慢。因此张贴作为答案。

相关问题