![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопоточный запуск [D7, WinXP]
yury1 © (2007-07-19 13:11:00)добрый день!
я создаю объект класса TidFTP во время работы программы следующим образом:
ftp:= TidFTp.create(self); (поправьте, если делаю неправильно)
причем таких объектов необходимо много.
как правильно потом их всех уничтожить, чтобы освободить используемые ресурсы?
yury1 (2007-07-20 18:14:00) [1]
> В этом случае тебе не нужно.
Что не нужно?
Stanislav (2007-07-20 17:15:00) [2]ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;
В этом случае тебе не нужно.
Это тебе может понадобится только если ты захочешь управлять создаными ftp (тогда все указатели тебе нужно будет хранить) если нет, то сразу удаляй их и все.
yury1 (2007-07-20 17:05:00) [3]to Stanislav и Anatoly Podgoretsky: спасибо за ответы по теме.
to Stanislav: про TStringList подробнее можно?
Вопрос 2: Если я буду процедуру вида:
ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;
вызывать одновременно из нескольких мест программы, не будут ли они пересекаться? имеется ввиду, если одновременно придут 2 файла: один поток обратится к этой процедуре с одними параметрами (адрес фтп, уч. запись), второй с другими.
iXT (2007-07-20 15:33:00) [4]> [7] yury1 (20.07.07 13:24)
Ну и расскажи чего получается, когда ты несколько раз давишь на кнопку1?
iXT (2007-07-20 15:31:00) [5]> [10] Сергей М. © (20.07.07 13:41)
>
> > yury1 (20.07.07 13:24) [7]
> >
> > Для проверки написал следующее
>
>
> Как это связано с многопоточностью ?
Ну в принципе связанно, тока он не знает об этом :)
Stanislav (2007-07-20 13:48:00) [6]Anatoly Podgoretsky © (20.07.07 13:47) [11]
ему надо их 2-й кнопкой их уничтожать
Anatoly Podgoretsky (2007-07-20 13:47:00) [7]
> так вот нажав 5 раз батон1, все ок. смотрю на фтп 5 клиентов
> (нормально)
> при нажатии батона2 - 1 раз, все ок (один клиент отсоединяется),
> при послед. нажатии "Access violation"... (и 4 клиента
> так и остались на фтп).
Раз у тебя это работает, то достаточно применить локальные переменные.
Сергей М. (2007-07-20 13:41:00) [8]
> yury1 (20.07.07 13:24) [7]
>
> Для проверки написал следующее
Как это связано с многопоточностью ?
Stanislav (2007-07-20 13:31:00) [9]Добавляй их в TStringList. - если не понял подробнее напишу.
Stanislav (2007-07-20 13:30:00) [10]Так у тебя ftp ссылается на последний объект
yury1 (2007-07-20 13:24:00) [11]Для проверки написал следующее:
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 клиента так и остались на фтп).
Такого быть не должно!
umbra (2007-07-20 13:12:00) [12]обязательно освобождать ресурсы можно, например, так
ftp:= TidFTp.create(nil);
{инициализируем св-ва}
try
ftp.Connect;
{...делаем что надо....}
finally
ftp.Disconnect;
ftp.Free;
end;
Сергей М. (2007-07-20 13:00:00) [13]
> yury1 (20.07.07 12:51) [3]
В случае с self см. ответ в [1]
StriderMan (2007-07-20 12:57:00) [14]
> Как это сделать корректно с обязательным последующим освобождением
> затраченных ресурсов?
var
ftp: TidFTp;
begin
.....
ftp := TidFTp.create( nil);
try
отсылаем
finally
ftp.Free;
end;
yury1 (2007-07-20 12:51:00) [15]объясню, что нужно:
есть программа, кот. проверяет каталоги. При появлении файлов, с ними нужно выполнить опред. действия, одно из которых отправка по фтп.
так вот, предположим пришло одновременно 2 файла, оба нужно отправить на разные фтп. Как это сделать корректно с обязательным последующим освобождением затраченных ресурсов?
Сергей М. (2007-07-19 14:05:00) [16]
> Многопоточный
Чтов твоем вопросе хоть как-либо касается потоков ?
Ничто.
Сергей М. (2007-07-19 13:49:00) [17]Достаточно уничтожить того, кто представлен тем самым self, фигурирующим в твоем коде.