Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.045 c
3-1178140671
Германн
2007-05-03 01:17
2007.08.19
Прошу помощи у специалистов по БД


1-1180368669
Dmitry_177
2007-05-28 20:11
2007.08.19
Перехват клавиатуры


9-1157685661
tmtlib
2006-09-08 07:21
2007.08.19
Загрузка скелетной анимации из Blender!!!


15-1184744504
stone
2007-07-18 11:41
2007.08.19
Мысли вслух или найдено на просторах интернета


2-1185427023
Inearthed
2007-07-26 09:17
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский