 |
Как узнать скорость загрузки файла используя Indy. - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
19.07.2013, 07:45
|
#1
|
|
|
|
Фельдмаршал
|
 Регистрация: 22.02.2011
 Сообщений: 949
 Популярность: 34698
 Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
|
Как узнать скорость загрузки файла используя Indy.
Как узнать скорость загрузки файла используя Indy.
|
|
|
19.07.2013, 14:34
|
#2
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
 |
Цитата: |
 |
|
|
 |
Сообщение от Dimedrol1536 |
 |
|
|
|
|
|
|
Как узнать скорость загрузки файла используя Indy.
|
|
 |
|
 |
|
Количество скаченных байт - (название стрима).size;
Делай это в таймере, onWork или в потоке. Записываешь в некоторую переменную.
Ожидание 1 секунда (потока, таймера не важно).
(название стрима).size минус переменная в которой записан предыдущий размер.
Так ты получишь объем скачанный за секунду.
Результат будет вроде как в байтах, но могу ошибаться, ибо не помню.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось metraz; 19.07.2013 в 14:36.
|
|
|
Пользователь сказал cпасибо:
|
|
19.07.2013, 20:49
|
#3
|
|
|
|
Сержант
|
 Регистрация: 01.10.2011
 Сообщений: 128
 Популярность: 5723
 Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
Наркоманы, дуйте в школу, расстояние / время = скорость. Для особо непонятливых: кол-во байт / время загрузки = скорость загрузки
________________
Talk is cheap. Show me the code
— Linus Torvalds
|
|
|
20.07.2013, 00:25
|
#4
|
|
|
|
Фельдмаршал
|
 Регистрация: 22.02.2011
 Сообщений: 949
 Популярность: 34698
 Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
|
|
|
20.07.2013, 01:27
|
#5
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось metraz; 20.07.2013 в 01:29.
Причина: Добавлено сообщение
|
|
|
20.07.2013, 18:50
|
#6
|
|
|
|
Фельдмаршал
|
 Регистрация: 22.02.2011
 Сообщений: 949
 Популярность: 34698
 Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
|
|
|
20.07.2013, 20:02
|
#7
|
|
|
|
Сержант
|
 Регистрация: 01.10.2011
 Сообщений: 128
 Популярность: 5723
 Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Ожидание 1 секунда (потока, таймера не важно).
(название стрима).size минус переменная в которой записан предыдущий размер.
|
|
 |
|
 |
|
Псевдокод:
Код:
lastReceived = 0
func progress_callback(obj, state)->
speed = state.TotalReceived - lastReceived
lastReceived = state.TotalReceived
endTime = state.FileSize / speed
или
Код:
startTime= GetCurentTime()
func progress_callback(obj, state)->
speed = state.TotalReceived / (GetCurentTime() - startTime).Seconds
endTime = state.FileSize / speed
И какой вариант менее наркоманский?
________________
Talk is cheap. Show me the code
— Linus Torvalds
Последний раз редактировалось Yukikaze; 20.07.2013 в 20:07.
|
|
|
21.07.2013, 01:43
|
#8
|
|
|
|
Фельдмаршал
|
 Регистрация: 22.02.2011
 Сообщений: 949
 Популярность: 34698
 Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
|
|
|
21.07.2013, 20:02
|
#9
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
 |
Цитата: |
 |
|
|
 |
Сообщение от Dimedrol1536 |
 |
|
|
|
|
|
|
Оба наркоманские, не на Delphi написаны.
|
|
 |
|
 |
|
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
21.07.2013, 20:29
|
#10
|
|
|
|
Пехотинец
|
 Регистрация: 20.12.2010
 Сообщений: 58
 Популярность: 50
 Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
 |
Цитата: |
 |
|
|
|
|
|
Я не знаю почему, но пост "Оба наркоманские, не на Delphi написаны." вызвал такие же эмоции, так и хотелось влепить facepalm, но не стал.
Dimedrol1536, тебе дали логику, а не готовый код. По сути программист не должен быть привязан к одному языку. Я могу тебе привести аналог на Delphi, но поможет ли он тебе?
Код:
procedure TMainForm.TimeTimer(Sender: TObject);
var DownloadStr, LeftStr, SpeedStr: string;
begin
inc(TimeOfLoad); // Сколько секунд прошло
{ Форматирование для вывода }
SpeedStr:=IntToStr(Round(SizeOfGetFile/1024/TimeOfLoad));
DownloadStr:=FormatFloat('#.##', SizeOfGetFile/1024/1024);
if DownloadStr[1] = ','
then
DownloadStr:='0'+DownloadStr;
LeftStr:=FormatFloat('#.##', (SizeOfFile-SizeOfGetFile)/1024/1024);
if LeftStr[1] = ','
then
LeftStr:='0'+LeftStr;
{ Форматирование для вывода }
{ Вывод }
lblSpeed.Caption:='Скорость: '+SpeedStr+' кб/с';
lblDownload.Caption:='Скачалось: '+DownloadStr+' мб';
lblLeft.Caption:='Осталось: '+LeftStr+' мб';
{ Вывод }
end;
Это код таймера, который нужно запускать в начале загрузки файла. Надеюсь нужные переменные объявишь сам и запишешь в них нужные значения.
|
|
|
21.07.2013, 21:06
|
#11
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
21.07.2013, 21:06
|
#12
|
|
|
|
Сержант
|
 Регистрация: 01.10.2011
 Сообщений: 128
 Популярность: 5723
 Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: Как узнать скорость загрузки файла используя Indy.
У делфи слишком избыточный синтаксис, что бы на нем алгоритмы описывать, по этому я обычно использую псевдокод похожий на руби/питон
Код:
var
startTime: DWORD;
procedure Download(url: string);
var
Http: TIdHTTP;
stream: TMemoryStream;
begin
try
Http := TIdHTTP.Create(nil);
stream := TMemoryStream.Create; //ugly hack. На самом деле нужно сразу писать на диск, а не хранить весь хлам в памяти
Http.OnWork := DoWork;
startTime := GetTickCount;
Http.Get(url, stream);
finally
stream.Free;
Http.Free;
end;
end;
procedure DoWork(sender: TObject; mode: TWorkMode; received: Int64);
var
Http: TIdHTTP;
ContentLength: Int64;
downloadSpeed: Single;
seconds: Single;
begin
Http := TIdHTTP(sender);
ContentLength := Http.Response.ContentLength;
seconds := (GetTickCount - startTime) / 1000;
downloadSpeed := received / seconds;
end;
________________
Talk is cheap. Show me the code
— Linus Torvalds
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:00.
|
 |