Варианты подключения скручивания - PullRequest
1 голос
/ 11 апреля 2010

Я хотел бы знать, как проверить скорость загрузки файла в режиме реального времени с помощью библиотеки curl в C ++. Вот что я написал:

curl_easy_getinfo(curl,CURLINFO_SPEED_UPLOAD,&c);

Но в руководстве сказано, что оно показывает среднюю скорость, но даже это, похоже, не работает со мной, потому что я вижу только 0.

Есть еще одна вещь: как установить лимит загрузки, который работает, потому что, если я напишу это:

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100);

Я получаю сообщение об ошибке 502.

Ответы [ 3 ]

3 голосов
/ 11 апреля 2010

Из curl_easy_getinfo документов:

CURLINFO_SPEED_UPLOAD

Передайте указатель на двойное число, чтобы получить среднюю скорость загрузки, измеренную с помощью curl для complete [выделение добавлено] Измеряется в байтах / секунду.

CURLINFO_SPEED_UPLOAD работает только после завершения обновления. Вместо этого напишите обратный вызов процесса и установите CURLOPT_PROGRESSFUNCTION. Пусть ваша функция прогресса вычислит экспоненциальное скользящее среднее для текущей скорости.

progress(curl, fd, len):
    now = time()
    speed = len/(now-then) * weight + speed * (1-weight)
    update progress display
    then=now

Как всегда, скорость сети является приблизительной.

0 голосов
/ 30 апреля 2014

Согласно документации curl_easy_setopt вам необходимо передать curl_off_t в качестве параметра для CURLOPT_MAX_SEND_SPEED_LARGE, который является long long . (Это может быть новым, поскольку были даны другие ответы.)

CURLOPT_MAX_SEND_SPEED_LARGE

Передайте curl_off_t в качестве параметра. Если загрузка превышает эту скорость (подсчитывается в байтах в секунду) на кумулятивном среднем за перевод, передача будет приостановлена, чтобы сохранить среднюю скорость менее или равно значению параметра. По умолчанию используется неограниченная скорость.

Этот параметр не влияет на скорость передачи, выполняемую с помощью FILE: // URL. (Добавлено в 7.15.5)

Пример:

curl_easy_setopt( curl, CURLOPT_MAX_SEND_SPEED_LARGE, 1024LL );
0 голосов
/ 09 сентября 2011

Я бы также рекомендовал вам передавать long вместо int. (Они не всегда имеют одинаковый размер, и curl_easy_setopt ожидает длинное.

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100L)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...