Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
3-1199497352
DimonS
2008-01-05 04:42
2008.06.08
Хитрый отчет в FastReport


2-1210672414
nelco
2008-05-13 13:53
2008.06.08
Помогите с DBGrid


15-1208330103
Иван77
2008-04-16 11:15
2008.06.08
как открыть порт.


2-1210787964
Rustam01
2008-05-14 21:59
2008.06.08
курсор в memo


11-1189702877
rainstuff
2007-09-13 21:01
2008.06.08
Тормозит ScrollBox