C libcurl - измерить скорость загрузки и оставшееся время - PullRequest
1 голос
/ 09 августа 2010

Я использую следующий код для загрузки файлов из Интернета:

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

Как измерить текущую скорость загрузки (например, каждую секунду) и оставшееся время до завершения загрузки?

1 Ответ

5 голосов
/ 09 августа 2010

Вы можете использовать CURLOPT_PROGRESSFUNCTION.curl передает 5 аргументов вашей функции обратного вызова: clientp, dltotal, dlnow, ultotal и ulnow.clientp - это указатель, который вы указываете CURLOPT_PROGRESSDATA.Общие параметры - это общие суммы, которые необходимо загрузить;сейчас те суммы пока.Неизвестные значения: 0.

Чтобы использовать это, вы должны установить CURLOPT_NOPROGRESS в 0.

...