Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

application.ProcessMessages [D7, XP]


Страницы:   1 2

Mozgan ©   (2008-05-19 13:44:00) 

Добрый день!

Выполняется следующий код

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 - но все равно не работает как нужно. Посоветуйте, как можно исправить ситуацию.


Anatoly Podgoretsky   (2008-05-19 15:35:00) [1]

Описание - http://msdn.microsoft.com/en-us/library/ms775123.aspx
Обратить также внимение на lpfnCB в ней можно вызывать application.ProcessMessages - проверив конечно на надежность и также выводить прогресс и это позволит прервать закачку в случае необходимости.


Igor M.   (2008-05-19 15:31:00) [2]

быстрее, потому что с кеша читает. перегрузи прогу и опять будут тебе тормоза..

гы-гы


Сергей М.   (2008-05-19 14:55:00) [3]


> Я экспериментировал


Не надо прыгать с бубном и гадать на кофейной гуще.
Следует просто ворспользоваться встроенным в Делфи отладчиком.


Mozgan   (2008-05-19 14:53:00) [4]

Если между двумя этими функциями нет никаких отличий, тогда почему программа стала корректно работать???
Я экспериментировал и с той и с другой функцией.
функция function DownloadFile(SourceFile, DestFile: string): Boolean;
неизвестно почему - просто вешает моё приложение!!!!!!


Сергей М.   (2008-05-19 14:36:00) [5]


> можно сделать вывод, что использование 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

нет никаких принципиальных отличий


Palladin   (2008-05-19 14:33:00) [6]

или мне кажется, или я правда чего'то в этой жизни не понимаю... ну да ладно...


Mozgan   (2008-05-19 14:31:00) [7]

Теперь при загрузке прога не виснет. Добавил progressbar, компонент корректно себя "отрисовывал". Ранее было все криво. Прога не виснет.
В итоге, можно сделать вывод, что использование UrlDownloadToFile предпочтительнее DownloadFile. Это с моей точки зрения.
Конечно согласен, что стоило бы вынести в отдельный поток. Но пока до этой реализации далеко :(


{RASkov}   (2008-05-19 14:23:00) [8]

> [16] ANB   (19.05.08 14:19)

Он спрашивал про другую функцию в [6] нежели как ты понял в [7] ;)


Сергей М.   (2008-05-19 14:23:00) [9]


> Mozgan   (19.05.08 14:19) [15]


И что, по-твоему, принципиально изменилось ?


{RASkov}   (2008-05-19 14:22:00) [10]

> некуда, там всего 5 строчек

Между первой и пятой можно ОС написать :)


Palladin   (2008-05-19 14:21:00) [11]


> ANB   (19.05.08 14:19) [16]

:) некуда, там всего 5 строчек


ANB   (2008-05-19 14:19:00) [12]


> Он писал. Чуть повыше.

Ну если он сам ее писал, то надо воткнуть также и в нее процессмесадж. Тока разумно и аккуратно.


Mozgan   (2008-05-19 14:19:00) [13]

Да, это был поезд!!!!!!


 if UrlDownloadToFile(nil, pchar(SourceFile), pchar(DestFile), 0, nil) <> S_OK then


Процесс выполняется намного быстрее!

Всем спасибо!

Тема закрыта.

p.s. Про поезд понравилось :))))


Сергей М.   (2008-05-19 14:17:00) [14]


> по окончании осовободиться то как?
>


Прежде чем "освобождаться", нужно создать то что будет "освобождаться", т.е соответствующий интерф.объект


Palladin   (2008-05-19 14:16:00) [15]


> Про интерфейсы кажется ясно

"и голова моя просветлела, и увидел я свет в конце туннеля... это был поезд" :)


Mozgan   (2008-05-19 14:11:00) [16]

Реально ли использование примерно следующего кода?
URLDownloadToFile(NULL,Url,Name,0,(LPBINDSTATUSCALLBACK));


Про интерфейсы кажется ясно - по умолчанию nil, с результатами кажется тоже. Но по окончании осовободиться то как?

LPBINDSTATUSCALLBACK.Release();


Сергей М.   (2008-05-19 14:06:00) [17]


> Palladin ©   (19.05.08 14:04) [10]


Я ж пока еще не рухнул с дуба)


Palladin   (2008-05-19 14:04:00) [18]


> Функцию кто писал ?

Он писал. Чуть повыше.


> Сергей М. ©   (19.05.08 13:52) [5]

Ну вот теперь давай. Рассказывай про интерфейсы и IBindStatusCallback в частности :)


Mozgan   (2008-05-19 14:04:00) [19]

Функцией DownloadFile воспользовался из FAG.
Но с URLDownloadToFile - не знаком.


Сергей М.   (2008-05-19 14:03:00) [20]

А что, на ней свет клином сошелся ?
Возьми, к примеру, IdHTTP + IdAntifreeze - пара этих компонентов решит ту же задачу безо всяких заморочек с потоками и "зависаниями".


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо