C libcurl-测量下载速度和剩余时间

C libcurl-测量下载速度和剩余时间,c,time,download,performance,libcurl,C,Time,Download,Performance,Libcurl,我正在使用以下代码从internet下载文件: size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; written = fwrite(ptr, size, nmemb, stream); return written; } int main(int argc, char** argv) { FILE *downloaded_file; if (

我正在使用以下代码从internet下载文件:

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written;
    written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(int argc, char** argv)
{
 FILE *downloaded_file;
 if ( (downloaded_file = fopen (download_path , "w" ) ) != NULL )
 {
  CURL *curl;
  CURLcode res;
  curl = curl_easy_init();
  if(curl)
  {
   curl_easy_setopt(curl, CURLOPT_URL, "www.asd.com/files/file_to_download.rar");
   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
   curl_easy_setopt(curl, CURLOPT_WRITEDATA, downloaded_file);
   res = curl_easy_perform(curl);
   curl_easy_cleanup(curl);

   if (res == CURLE_OK)
   {
    printf("Download complete!\n");
   }
  }
  fclose(downloaded_file);
 }
}
如何测量当前下载速度(例如每秒)和完成下载的剩余时间?

您可以使用。curl将向回调函数传递5个参数,
clientp
dltotal
dlnow
ultotal
ulnow
clientp
是您随
CURLOPT_PROGRESSDATA
提供的指针。total参数是需要下载的总数量;现在的数字是目前为止的数字。未知值为0

要使用此选项,必须将
CURLOPT\u NOPROGRESS
设置为0。

您可以使用。curl将向回调函数传递5个参数,
clientp
dltotal
dlnow
ultotal
ulnow
clientp
是您随
CURLOPT_PROGRESSDATA
提供的指针。total参数是需要下载的总数量;现在的数字是目前为止的数字。未知值为0


要使用它,您必须将
CURLOPT\u NOPROGRESS
设置为0。

这是progressbar,如何使用它来测量速度?总体平均下载速度为dlnow/(当前时间-开始时间)。“当前”下载速度有点棘手。首先,您需要定义它的含义。一种可能是有一段老时光,现在又老了。六年后仍然是一个非常有用的评论:P感谢速度=((现在下载-最后下载字节)/(QTime().currentTime().second()-oldTime.second())/1024);完全适用于我xD@БСССБфцГ145我正在尝试你的代码,它不断打印
nan
inf
,但实际上没有显示速度。这是progressbar,我如何使用它来测量速度?总体平均下载速度是dlnow/(当前时间-开始时间)。“当前”下载速度有点棘手。首先,您需要定义它的含义。一种可能是有一段老时光,现在又老了。六年后仍然是一个非常有用的评论:P感谢速度=((现在下载-最后下载字节)/(QTime().currentTime().second()-oldTime.second())/1024);完全适用于我xD@ББСССБфцГ145我正在尝试你的代码,它不断打印
nan
inf
,但实际上没有显示速度。