Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Synapse FTP в потоке - можно ли?


Romingood ©   (13.10.16 01:53

Привет всем. Прошерстил все форумы, ответа не нашел.

Есть Synapse, скачивает - закачивает файл по ftp (код стандартный),
всё работает отлично, показывает статус бар загрузки заливки файлов.
(наверное иоказывает ))) )

Но. При начале FTP загрузки файла (или закачки на FTP сервер) форма виснет мертво. Потом отвисает после завершения загрузки.

Всё бы хорошо, форма-то хрен с ней, но статус бар-то не шевелится.
Id Антифриз и Application.Processmessages НИКАК не помогает. Мне бы хоть раз в 10 сек. форму обновить, но виснет глухо, а файлы большие, под 500 мб.  

Вопрос. Как мне правильно перенести ftp часть в thread?

Я перенес (поток организовал прямо в Form1),

(запускаю его так  
FtpThread:=TMyThread.Create(False);
 FtpThread.Priority:=tpNormal;
 FtpThread.FreeOnTerminate:=true;)


он работает, форма перестала виснуть, но во первых, я не знаю как передать в этот поток около 8 переменных (размер файла, имя, бла бла бла и еще вернуть в форму обратно одну переменную с результатами работы), глобальные переменные, объявленные в форме,  поток не видит почему-то, также не видятся глобальные переменные, объявленнные прямо в файле Dpr...

И второй вопрос - там в форме присутствует процедура вычисления пробежавших байт, чтобы посчитать, че проказывать на прогрессбаре.
В форме у меня всё работает.



procedure TForm1.DSockStatus(Sender: TObject; Reason: THookSocketReason;
 const Value: String);
begin
 if Reason in [HR_ReadCount, HR_WriteCount] then
   begin

////вычисление размера бла бла. не суть

   countfilesize:=countfilesize+strtoint(Value);

   end;
end;



Но я не пойму, как прописать эту же процедуру, но внутри будущего потока, т.к. воспользоваться этой процедурой из потока не получается, он ее просто не видит.  

Вроде люди говорят, что подобное (и  передачу параметров, и процедуру) нужно оформлять в виде класса, но я в ООП не силен,  мне б набросок...

Спасибо заранее.


NoUser ©   (15.10.16 23:22[1]

> Прошерстил все форумы, ответа не нашел.
Садись читать книжки и справку.

> объявленнные прямо в файле Dpr.
http://www.delphisources.ru/forum/showthread.php?t=13908

> мне б набросок
http://www.delphisources.ru/forum/showthread.php?t=13173

> но я в ООП не силен
ну тогда дюж winapi - BeginThread \ CreateThread


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо