Показать сообщение отдельно
Непрочитано 22.08.2012, 18:13   #7
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: Работа с потоками в delphi

Цитата:
Сообщение от Hint Посмотреть сообщение
Странная постановка задачи.

Зависает скорее не сохранение, а загрузка файла. Не может файл скачиваться быстрее, чем записываться на локальный диск. Скачку и сохранение надо делать в отдельном потоке с информированием формы через SendMessage. Типа TDownloader.Create('http://example.com/file.zip', 'C:\file.zip', frmMain.Handle). Объект TDownloader в процессе шлет форме сообщения о прогрессе, в случае ошибки и при завершении загрузки.

Зачем делать новый поток, если основной поток будет в цикле ждать его завершения? При вызове Application.ProcessMessages форма конечно будет перерисовываться, и кнопки будут нажиматься, но по-моему так делать не стоит.
Подвисает именно сохранение (двигать окошко нельзя).
Я делал через Indy Http тк там можно считать % сколько скачалось и прочее. А потом стрим сохранял на диск.

Добавлено через 5 минут
Цитата:
Сообщение от G1ta0 Посмотреть сообщение
Код:
Self.Priority:=tpHighest;    //Стартуем с высоким приоритетом
Эта строчка от лукавого.
Переделывал под себя, вроде как не влияет..
Цитата:
Сообщение от G1ta0 Посмотреть сообщение
Код:
SaveFile:=TSaveFile.Create(stream,path);
Application.ProcessMessages;
Тебе надо в цикле проверять завершение потока, попустно делая Application.ProcessMessages, чтобы GUI не зависало. Заюзай TEvent.
Файл качается, но на диске или создается файл в 0 метров или же вообще пустота.
Чтобы не зависало использую антифриз.

Последний раз редактировалось Zubastic; 22.08.2012 в 18:19. Причина: Добавлено сообщение
Zubastic вне форума Ответить с цитированием