| 
| 
 | Вопрос # 3 658/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты! Я использую простенький алгоритм :
 procedure TForm1.btn1Click(Sender: TObject);
 var
 hInet, //<-переменная сод. указатель на сессию
 hURL: HINTERNET; //<-указатель на URL
 fSize, //<-размер файла
 ReadLen, //<-количество реально прочитанных байт
 RestartPos: DWORD; //<-|позиция с которой начинается
 //  |докачка
 fBuf: array[1..1024] of byte; //<-буфер куда качаем
 f: file; //<-файл куда качаем
 Header: string; //<-|дополнительная переменная в HTTP
 begin
 .....
 end;
 
 Его можно найти везде! если набрать в поиске.
 Так вот сам вопрос - Можно ли как-нибудь ограничить скорость скачки в данном примере?
 
 Мои подозрения падают на это - fBuf: array[1..1024] of byte;
 А именно, то что может быть изменить там размер буфера.
 
 Подскажите пожалуйста или дайте наводку (сам люблю мозгами шевелить! Просто уже терпение лопнуло за весь день!)
 Заранее Спасибо!
 
|  |   Вопрос задал: eclipse (статус: Посетитель)Вопрос отправлен: 16 января 2010, 21:19
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну, конечно скорость зависит от размера буфера, но эта зависимость не столь значительная, чтобы ей пользоваться. Я бы вынес скачивание в отдельный Thread, а в цикле закачки регилировал скорость просто вставкой нужной задержки. 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 17 января 2010, 10:00
 Оценка за ответ: 5
 Комментарий к оценке: Спасибоооооооооооо!!!! ОГРОМНООООООЕ! Действительно помогло - fBuf: array[1..1024] of byte в этом месте изменил 1024 на 30 и теперь программа хреначит как барбос!
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 17 января 2010, 12:16; участников в обсуждении: 2. 
|   | eclipse (статус: Посетитель), 17 января 2010, 11:29 [#1]:Ну допустим я, как Вы сказали, заторможу немного время Вот так : 
 procedure Delay(ms: longint);
 
 procedure tform1.Delay(ms: longint);
 var
 TheTime: LongInt;
 begin
 TheTime := GetTickCount + ms;
 while GetTickCount < TheTime do
 Application.ProcessMessages;
 end;
 
 Тем самым не тормозя форму(чтоб она не висла), но от этого же будет только такой эффект что она сперва качает качает, потом стоит, а потом опять со всей мощью начинает качать и т.д. Т.е. получается что мы просто поставим интервал скачки а не ограничение по скорости! Так? Или я не правильно рассуждаю?
 |  
|   | eclipse (статус: Посетитель), 17 января 2010, 11:45 [#2]:Мне кажется что значения буфера нужно подбирать под свою скорость интернета. Вот например у меня провайдер даёт от 30 до 40 кб в сек. , поэтому уменьшение буфера увеличило производительность! Ежли не так то поправьте. |  
|   | min@y™ (статус: Доктор наук), 17 января 2010, 11:48 [#3]:А какая разница? Главное, чтобы прога занимала не всё время канала, а часть. Чем больше интервалы задержки, тем меньше средняя скорость закачки. А вот в основном потоке так делать не стоит:
 
 while GetTickCount < TheTime do
  Application.ProcessMessages; // <-- Загрузка CPU = 100% Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 17 января 2010, 11:50 [#4]: Цитата (eclipse): Мне кажется что значения буфера нужно подбирать под свою скорость интернета. Верно мыслишь.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | eclipse (статус: Посетитель), 17 января 2010, 11:52 [#5]:Хм.... т.е. нужно организовать отдельный поток! |  
|   | min@y™ (статус: Доктор наук), 17 января 2010, 12:00 [#6]: Цитата (eclipse): Хм.... т.е. нужно организовать отдельный поток!  Дык я в ответе так и написал.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | eclipse (статус: Посетитель), 17 января 2010, 12:16 [#7]:Ага! так я и подтвердил это. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |