Форум: "Начинающим";
Текущий архив: 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.044 c