Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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

eclipse (статус: Посетитель), 17 января 2010, 11:45 [#2]:

Мне кажется что значения буфера нужно подбирать под свою скорость интернета. Вот например у меня провайдер даёт от 30 до 40 кб в сек. , поэтому уменьшение буфера увеличило производительность! Ежли не так то поправьте.
min@y™

min@y™ (статус: Доктор наук), 17 января 2010, 11:48 [#3]:

А какая разница? Главное, чтобы прога занимала не всё время канала, а часть. Чем больше интервалы задержки, тем меньше средняя скорость закачки.
А вот в основном потоке так делать не стоит:
while GetTickCount < TheTime do
  Application.ProcessMessages; // <-- Загрузка CPU = 100%
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 17 января 2010, 11:50 [#4]:

Цитата (eclipse):

Мне кажется что значения буфера нужно подбирать под свою скорость интернета.

Верно мыслишь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
eclipse

eclipse (статус: Посетитель), 17 января 2010, 11:52 [#5]:

Хм.... т.е. нужно организовать отдельный поток!
min@y™

min@y™ (статус: Доктор наук), 17 января 2010, 12:00 [#6]:

Цитата (eclipse):

Хм.... т.е. нужно организовать отдельный поток!

Дык я в ответе так и написал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
eclipse

eclipse (статус: Посетитель), 17 января 2010, 12:16 [#7]:

Ага! так я и подтвердил это.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:18
Выполнено за 0.03 сек.