Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Внизapplication.ProcessMessages Найти похожие ветки
← →
Mozgan (2008-05-19 13:44) [0]Добрый день!
Выполняется следующий код
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;
procedure Start;
var
SourceFile, DestFile: string;
i,j, k: integer;
begin
form1.ProgressBar1.Min:=0;
form1.ProgressBar1.Max:= form1.listbox1.Items.Count-1;
for i:=0 to form1.listbox1.Items.Count-1 do
begin
form1.ProgressBar1.Position:=i;
application.ProcessMessages;
SourceFile:= form1.Resource_Label.Caption;
DestFile:= form1.Path_Label3.Caption+form1.Inc_Count_File.Caption+form1.ComboBox1.Items[0];
application.ProcessMessages;
form1.Status_proc.Caption:="Загрузка...";
application.ProcessMessages;
if DownloadFile(SourceFile, DestFile) then
form1.ProgressBar1.Position:=0;
end;
end;
Прога копирует файлы, указанные в Listbox, но с сильными тормозами. В результате приложение иногда зависает. В тело цикла поставил application.ProcessMessages - но все равно не работает как нужно. Посоветуйте, как можно исправить ситуацию.
← →
Palladin © (2008-05-19 13:46) [1]перенести функционал получения ресурса в отдельный поток (thread)
← →
clickmaker © (2008-05-19 13:46) [2]вынеси в другой поток
← →
Mozgan (2008-05-19 13:48) [3]Спасибо! Но с тредами немного не знаком. Покажите пожалуйста пример как прпавильно работатьс потоком относительно моей задачи. С уважением!
← →
Palladin © (2008-05-19 13:49) [4]http://www.delphimaster.ru/articles/panov/
← →
Сергей М. © (2008-05-19 13:52) [5]
> с тредами немного не знаком
Определенного "улучшения" можно достигнуть и без тредов, но тогда придется задействовать
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);
← →
Mozgan (2008-05-19 13:59) [6]Можно прокомментировать функцию URLDownloadToFile?
Описание некоторых параметров мне не знакомо :(
← →
ANB (2008-05-19 14:02) [7]
> if DownloadFile(SourceFile, DestFile) then
Функцию кто писал ?
← →
Сергей М. © (2008-05-19 14:03) [8]А что, на ней свет клином сошелся ?
Возьми, к примеру, IdHTTP + IdAntifreeze - пара этих компонентов решит ту же задачу безо всяких заморочек с потоками и "зависаниями".
← →
Mozgan (2008-05-19 14:04) [9]Функцией DownloadFile воспользовался из FAG.
Но с URLDownloadToFile - не знаком.
← →
Palladin © (2008-05-19 14:04) [10]
> Функцию кто писал ?
Он писал. Чуть повыше.
> Сергей М. © (19.05.08 13:52) [5]
Ну вот теперь давай. Рассказывай про интерфейсы и IBindStatusCallback в частности :)
← →
Сергей М. © (2008-05-19 14:06) [11]
> Palladin © (19.05.08 14:04) [10]
Я ж пока еще не рухнул с дуба)
← →
Mozgan (2008-05-19 14:11) [12]Реально ли использование примерно следующего кода?
URLDownloadToFile(NULL,Url,Name,0,(LPBINDSTATUSCALLBACK));
Про интерфейсы кажется ясно - по умолчанию nil, с результатами кажется тоже. Но по окончании осовободиться то как?LPBINDSTATUSCALLBACK.Release();
← →
Palladin © (2008-05-19 14:16) [13]
> Про интерфейсы кажется ясно
"и голова моя просветлела, и увидел я свет в конце туннеля... это был поезд" :)
← →
Сергей М. © (2008-05-19 14:17) [14]
> по окончании осовободиться то как?
>
Прежде чем "освобождаться", нужно создать то что будет "освобождаться", т.е соответствующий интерф.объект
← →
Mozgan (2008-05-19 14:19) [15]Да, это был поезд!!!!!!
if UrlDownloadToFile(nil, pchar(SourceFile), pchar(DestFile), 0, nil) <> S_OK then
Процесс выполняется намного быстрее!
Всем спасибо!
Тема закрыта.
p.s. Про поезд понравилось :))))
← →
ANB (2008-05-19 14:19) [16]
> Он писал. Чуть повыше.
Ну если он сам ее писал, то надо воткнуть также и в нее процессмесадж. Тока разумно и аккуратно.
← →
Palladin © (2008-05-19 14:21) [17]
> ANB (19.05.08 14:19) [16]
:) некуда, там всего 5 строчек
← →
{RASkov} © (2008-05-19 14:22) [18]> некуда, там всего 5 строчек
Между первой и пятой можно ОС написать :)
← →
Сергей М. © (2008-05-19 14:23) [19]
> Mozgan (19.05.08 14:19) [15]
И что, по-твоему, принципиально изменилось ?
← →
{RASkov} © (2008-05-19 14:23) [20]> [16] ANB (19.05.08 14:19)
Он спрашивал про другую функцию в [6] нежели как ты понял в [7] ;)
← →
Mozgan (2008-05-19 14:31) [21]Теперь при загрузке прога не виснет. Добавил progressbar, компонент корректно себя "отрисовывал". Ранее было все криво. Прога не виснет.
В итоге, можно сделать вывод, что использование UrlDownloadToFile предпочтительнее DownloadFile. Это с моей точки зрения.
Конечно согласен, что стоило бы вынести в отдельный поток. Но пока до этой реализации далеко :(
← →
Palladin © (2008-05-19 14:33) [22]или мне кажется, или я правда чего"то в этой жизни не понимаю... ну да ладно...
← →
Сергей М. © (2008-05-19 14:36) [23]
> можно сделать вывод, что использование UrlDownloadToFile
> предпочтительнее DownloadFile
Чем предпочтительнее ?
Междуfunction DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;
иif UrlDownloadToFile(nil, pchar(SourceFile), pchar(DestFile), 0, nil) <> S_OK then
нет никаких принципиальных отличий
← →
Mozgan (2008-05-19 14:53) [24]Если между двумя этими функциями нет никаких отличий, тогда почему программа стала корректно работать???
Я экспериментировал и с той и с другой функцией.
функцияfunction DownloadFile(SourceFile, DestFile: string): Boolean;
неизвестно почему - просто вешает моё приложение!!!!!!
← →
Сергей М. © (2008-05-19 14:55) [25]
> Я экспериментировал
Не надо прыгать с бубном и гадать на кофейной гуще.
Следует просто ворспользоваться встроенным в Делфи отладчиком.
← →
Igor M. (2008-05-19 15:31) [26]быстрее, потому что с кеша читает. перегрузи прогу и опять будут тебе тормоза..
гы-гы
← →
Anatoly Podgoretsky © (2008-05-19 15:35) [27]Описание - http://msdn.microsoft.com/en-us/library/ms775123.aspx
Обратить также внимение на lpfnCB в ней можно вызывать application.ProcessMessages - проверив конечно на надежность и также выводить прогресс и это позволит прервать закачку в случае необходимости.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.05 c