Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> узнать окончание загрузки файла 
:(
    Опции темы
dembel
Дата 23.5.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Здраствуйте. хочу узнать скорость интернета, скачиваю файл, как узнать момент полной загрузки файла? (что бы можно было время засечь)
файл скачиваю при помощи IdHTTP1.Get 
PM MAIL   Вверх
elestrago
Дата 23.5.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 23.8.2007
Где: runet

Репутация: 1
Всего: 3



эм берешь и смотриш сколько он скачивает в секунду допустим он скачивает 10 килобайт в секунду, файл весит 200 кб, ну и соответственно кб\сек делишь на длинну файла ну вот примерно таким способом получишь то что он скачает файл за 20 секунд!

на примере кода показать затрудняюсь имхо не когда не использовал IdHTTP1.Get не было нужды 
--------------------
PM MAIL ICQ   Вверх
dembel14
Дата 23.5.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



elestrago, 
а как программно узнать сколько скачивает в секунду?
PM MAIL   Вверх
elestrago
Дата 23.5.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 23.8.2007
Где: runet

Репутация: 1
Всего: 3



ну если взять var str.Tfilestream; то по собитию таймера можно сделать проверку позиции в str ( str.position ) и сравнивать с позицией которая была секунду назад ) для этого можно взять перемунную и после проверки позиции в таймере записать эту позицию в переменную:

вот код только за работоспособность не отвечаю ) так как не проверял

Код

var
str:TFilestream;
i,z:integer;
....
begin
i:=0;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
z:=str.position-i;
i:=str.position;
end;



ну вот что то в этом проде )

но не обязательно делать по собитию таймера можно и цикл просто запустить

Это сообщение отредактировал(а) elestrago - 23.5.2008, 11:20
--------------------
PM MAIL ICQ   Вверх
Snowy
Дата 23.5.2008, 16:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(dembel @  23.5.2008,  00:45 Найти цитируемый пост)
как узнать момент полной загрузки файла?
Когда Get закончила работать, тогда файл и скачался.
PM MAIL   Вверх
sai_NT
Дата 14.6.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 8.8.2007

Репутация: 2
Всего: 3



Вот кусок примерчика из демки фтп-клиента (замени idFtp1 на idHTTP1 и объяви переменные):
Код

procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
Var
  S: String;
  TotalTime: TDateTime;
//  RemainingTime: TDateTime;
  H, M, Sec, MS: Word;
  DLTime: Double;
begin
  TotalTime :=  Now - STime;
  DecodeTime(TotalTime, H, M, Sec, MS);
  Sec := Sec + M * 60 + H * 3600;
  DLTime := Sec + MS / 1000;
  if DLTime > 0 then
    AverageSpeed := {(AverageSpeed + }(AWorkCount / 1024) / DLTime{) / 2};

  if AverageSpeed > 0 then begin
    Sec := Trunc(((ProgressBar1.Max - AWorkCount) / 1024) / AverageSpeed);

    S := Format('%2d:%2d:%2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);

    S := 'Time remaining ' + S;
  end
  else S := '';

  S := FormatFloat('0.00 KB/s', AverageSpeed) + '; ' + S;
  case AWorkMode of
    wmRead: StatusBar1.Panels[1].Text := 'Download speed ' + S;
    wmWrite: StatusBar1.Panels[1].Text := 'Uploade speed ' + S;
  end;

  ProgressBar1.Position := AWorkCount;
  AbortTransfer := false;
end;

procedure TMainForm.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  TransferrignData := true;
  STime := Now;
  if AWorkCountMax > 0 then ProgressBar1.Max := AWorkCountMax
  else ProgressBar1.Max := BytesToTransfer;
  AverageSpeed := 0;
end;

procedure TMainForm.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  StatusBar1.Panels[1].Text := 'Transfer complete.';
  BytesToTransfer := 0;
  TransferrignData := false;
  ProgressBar1.Position := 0;
  AverageSpeed := 0;
end;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.