Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.046 c
15-1209027549
БарЛог
2008-04-24 12:59
2008.06.08
Компьютер+Внешний IP+ Radmin_с_паролем


2-1211050274
Шестаков Антон
2008-05-17 22:51
2008.06.08
Копирование файлов


15-1209283131
Knight
2008-04-27 11:58
2008.06.08
Флешка взбунтовалась&amp;#133


2-1210921200
Sergey2
2008-05-16 11:00
2008.06.08
Images в ComboBox


6-1188565957
Андрей Пл
2007-08-31 17:12
2008.06.08
Как узнать программно имя машины и IP адрес





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский