Вниз
Скачать: CL | DM;

Многопоточный запуск   Найти похожие ветки 

← →
yury1   (2007-07-19 13:11) [0]

добрый день!
я создаю объект класса TidFTP во время работы программы следующим образом:
ftp:= TidFTp.create(self); (поправьте, если делаю неправильно)
причем таких объектов необходимо много.
как правильно потом их всех уничтожить, чтобы освободить используемые ресурсы?


← →
Сергей М. ©   (2007-07-19 13:49) [1]

Достаточно уничтожить того, кто представлен тем самым self, фигурирующим в твоем коде.


← →
Сергей М. ©   (2007-07-19 14:05) [2]


> Многопоточный


Что в твоем вопросе хоть как-либо касается потоков ?
Ничто.


← →
yury1   (2007-07-20 12:51) [3]

объясню, что нужно:
есть программа, кот. проверяет каталоги. При появлении файлов, с ними нужно выполнить опред. действия, одно из которых отправка по фтп.
так вот, предположим пришло одновременно 2 файла, оба нужно отправить на разные фтп. Как это сделать корректно с обязательным последующим освобождением затраченных ресурсов?


← →
StriderMan ©   (2007-07-20 12:57) [4]


> Как это сделать корректно с обязательным последующим освобождением
> затраченных ресурсов?

var
 ftp: TidFTp;
begin
.....

 ftp := TidFTp.create(nil);
 try
   отсылаем
 finally
   ftp.Free;
 end;


← →
Сергей М. ©   (2007-07-20 13:00) [5]


> yury1   (20.07.07 12:51) [3]


В случае с self см. ответ в [1]


← →
umbra ©   (2007-07-20 13:12) [6]

обязательно освобождать ресурсы можно, например, так

ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;


← →
yury1   (2007-07-20 13:24) [7]

Для проверки написал следующее:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ftp:= TIdFTP.Create(nil);
 ftp.OnStatus:= IdFTPStatus;
 ftp.Host:= "192.168.1.3";
 ftp.Username:= "yury";
 ftp.Password:= "1234";
 try
   ftp.Connect();
 except
   on E:Exception do
     ShowMessage(E.Message);
 end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if ftp.Connected then ftp.Disconnect;
 ftp.Free;
end;

так вот нажав 5 раз батон1, все ок.  смотрю на фтп 5 клиентов (нормально)
при нажатии батона2 - 1 раз, все ок (один клиент отсоединяется), при послед. нажатии "Access violation"... (и 4 клиента так и остались на фтп).
Такого быть не должно!


← →
Stanislav ©   (2007-07-20 13:30) [8]

Так у тебя ftp ссылается на последний объект


← →
Stanislav ©   (2007-07-20 13:31) [9]

Добавляй их в TStringList. - если не понял подробнее напишу.


← →
Сергей М. ©   (2007-07-20 13:41) [10]


> yury1   (20.07.07 13:24) [7]
>
> Для проверки написал следующее


Как это связано с многопоточностью ?


← →
Anatoly Podgoretsky ©   (2007-07-20 13:47) [11]


> так вот нажав 5 раз батон1, все ок.  смотрю на фтп 5 клиентов
> (нормально)
> при нажатии батона2 - 1 раз, все ок (один клиент отсоединяется),
>  при послед. нажатии "Access violation"... (и 4 клиента
> так и остались на фтп).

Раз у тебя это работает, то достаточно применить локальные переменные.


← →
Stanislav ©   (2007-07-20 13:48) [12]

Anatoly Podgoretsky ©   (20.07.07 13:47) [11]
ему надо их 2-й кнопкой их уничтожать


← →
iXT ©   (2007-07-20 15:31) [13]

> [10] Сергей М. ©   (20.07.07 13:41)
>
> > yury1   (20.07.07 13:24) [7]
> >
> > Для проверки написал следующее
>
>
> Как это связано с многопоточностью ?

Ну в принципе связанно, тока он не знает об этом :)


← →
iXT ©   (2007-07-20 15:33) [14]

> [7] yury1   (20.07.07 13:24)

Ну и расскажи чего получается, когда ты несколько раз давишь на кнопку1?


← →
yury1   (2007-07-20 17:05) [15]

to Stanislav и Anatoly Podgoretsky: спасибо за ответы по теме.
to Stanislav: про TStringList подробнее можно?

Вопрос 2: Если я буду процедуру вида:

ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;

вызывать одновременно из нескольких мест программы, не будут ли они пересекаться? имеется ввиду, если одновременно придут 2 файла: один поток обратится к этой процедуре с одними параметрами (адрес фтп, уч. запись), второй с другими.


← →
Stanislav ©   (2007-07-20 17:15) [16]

ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;
В этом случае тебе не нужно.
Это тебе может понадобится только если ты захочешь управлять создаными ftp (тогда все указатели тебе нужно будет хранить) если нет, то сразу удаляй их и все.


← →
yury1   (2007-07-20 18:14) [17]


> В этом случае тебе не нужно.


Что не нужно?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.027 c
2-1185559407
Скарамуш
2007-07-27 22:03
2007.08.19
Реакция на клавишу


15-1185256532
dimaL
2007-07-24 09:55
2007.08.19
Вкладка Interbase


15-1185125141
Sdubaruhnul
2007-07-22 21:25
2007.08.19
Москвичи или это я гоню?


15-1184836226
icms
2007-07-19 13:10
2007.08.19
Версия delphi для flash


11-1166716930
fender
2006-12-21 19:02
2007.08.19
KOL/MCK и обыкновенные VCL компоненты и библиотеки




   Наверх