【问题标题】:C libcurl - measure download speed and time remainingC libcurl - 测量下载速度和剩余时间
【发布时间】:2011-03-27 06:55:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: c time download performance libcurl


    【解决方案1】:

    您可以使用CURLOPT_PROGRESSFUNCTION。 curl 会将 5 个参数传递给您的回调函数,clientpdltotaldlnowultotalulnowclientp 是您使用 CURLOPT_PROGRESSDATA 提供的指针。 total 参数是需要下载的总量;现在是到目前为止的金额。未知值为 0。

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

    【讨论】:

    • 这个是进度条用的,怎么用这个来测量速度?
    • 整体平均下载速度为dlnow/(当前时间-开始时间)。 “当前”下载速度有点棘手。首先,您需要定义它的含义。一种可能性是拥有 old_time 和 old_now。然后是 (dlnow - oldNow) / (当前时间 - oldTime)。
    • 6 年后仍然是一个非常有用的评论:P 感谢速度 = ((NowDownloaded - lastDownloadedBytes) / (QTime().currentTime().second() - oldTime.second()) / 1024 );完全为我工作xD
    • @КодСерфинг145 我正在尝试您的代码,它会不断打印naninf,但实际上没有显示速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多