Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2010, 11:08
elsouro elsouro вне форума
Прохожий
 
Регистрация: 10.06.2010
Сообщения: 4
Репутация: 10
По умолчанию idAntiFreeze

Программа по нажатию кнопки скачивает из интернета определенный файл такой функцией
Код:
function GetInetFile (const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: String;
begin
  Result:=False;
  sAppName := ExtractFileName(Application.ExeName);
  hSession :=InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until BufferLen = 0;
      CloseFile(f);
      Result:=True;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;

Как сделать, чтобы она не зависала на время пока скачивается файл? Добавлял Indy Antifreeze - не помогает...
Может быть использовать какой-нить другой способ скачки?
Ответить с цитированием
  #2  
Старый 06.07.2010, 11:11
Аватар для Autumn
Autumn Autumn вне форума
Прохожий
 
Регистрация: 29.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Если я не ошибаюсь, эта функция из DelphiWorld. Но даже если она не оттуда - вынеси ее в отдельный поток (TThread) и будет тебе счастье.

P.S: можно после каждого прохождения цикла вставить Application.ProcessMessages, но это будет не так эффективно.
Ответить с цитированием
  #3  
Старый 06.07.2010, 13:01
elsouro elsouro вне форума
Прохожий
 
Регистрация: 10.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Да, функцию не я писал. Вот попробовал потоки:

Код:
procedure TThreadDL.Execute;                             
 begin
     Synchronize(DoWork);
 end;

procedure TThreadDL.DoWork;
 begin
 GetInetFile(picurl, LocalFile);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TThreadDl.Create(false);
end;

но все равно подвисает, что я не так делаю?)

Последний раз редактировалось elsouro, 06.07.2010 в 13:03.
Ответить с цитированием
  #4  
Старый 06.07.2010, 16:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Synchronize выполняет метод в основном потоке. лекарство:
PHP код:
procedure TThreadDL.Execute;                             
begin
  GetInetFile
(picurlLocalFile);
end
Ответить с цитированием
  #5  
Старый 07.07.2010, 19:53
elsouro elsouro вне форума
Прохожий
 
Регистрация: 10.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Synchronize выполняет метод в основном потоке. лекарство:
PHP код:
procedure TThreadDL.Execute;                             
begin
  GetInetFile
(picurlLocalFile);
end

Спасибо за совет, но, к сожалению, не помогло...
Собственно, суть этой части программы в том, что она скачивает картинку (png) из интернета, показывает на форме и сохраняет в папку. Может ли программа зависать на последних двух операциях?
Ответить с цитированием
  #6  
Старый 07.07.2010, 20:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от elsouro
не помогло...
так не бывает. уверен, что TThreadDL от TThread унаследован?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025