Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: 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 вся ветка

Текущий архив: 2007.08.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1185113973
Гость_1
2007-07-22 18:19
2007.08.19
проблема с числами или у меня :)


2-1184886310
vasIZmax
2007-07-20 03:05
2007.08.19
Проблема с "я"


3-1178288128
Inna_Z
2007-05-04 18:15
2007.08.19
Как узнать версию к которой подключились?


1-1180009380
JanMihail
2007-05-24 16:23
2007.08.19
Главные окна из списка


15-1184924724
Ega23
2007-07-20 13:45
2007.08.19
Рыдал... :)))))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский