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

1 c performance time download libcurl

我使用以下代码从互联网上下载文件:

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);
 }
}
Run Code Online (Sandbox Code Playgroud)

如何测量当前下载速度(例如每秒)和完成下载的剩余时间?

Mat*_*hen 5

你可以用CURLOPT_PROGRESSFUNCTION.卷曲将通过5个参数回调函数,clientp,dltotal,dlnow,ultotal,和ulnow. clientp是你提供的指针CURLOPT_PROGRESSDATA.总参数是需要下载的总金额; 现在的数量是到目前为止的金额.未知值为0.

要使用它,您必须设置CURLOPT_NOPROGRESS为0.

  • 总体平均下载速度为dlnow /(当前时间 - 开始时间)."当前"下载速度有点棘手.首先,您需要定义它的含义.一种可能性是拥有old_time和old_now.然后是(dlnow - oldNow)/(当前时间 - oldTime). (3认同)