Привет всем. Прошерстил все форумы, ответа не нашел.
Есть 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;
Но я не пойму, как прописать эту же процедуру, но внутри будущего потока, т.к. воспользоваться этой процедурой из потока не получается, он ее просто не видит.
Вроде люди говорят, что подобное (и передачу параметров, и процедуру) нужно оформлять в виде класса, но я в ООП не силен, мне б набросок...
Спасибо заранее.