![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день. есть код, который:
- создает поток TLoader - в потоке создает объекты TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdCompressorZLib, TMemoryStream (для загрузки страницы) можно создавать все эти объеты в конструкторе и уничтожать в деструкторе и использовать в загрузчике: Код:
type
TLoader = class(TThread) (*создаем свой класс на базе ПОТОК*)
private
FUrl:string;
FText:string;
FIdHttp:TidHTTP;
FSSL:TIdSSLIOHandlerSocketOpenSSL;
FCompressZLib:TIdCompressorZLib;
FStream:TMemoryStream;
protected
function LoadURL(const Url: String): string;(*загрузчик страницы: кодировка; удаление скриптов*)
function LoadHtmlPage(const Url:string):string; (*закачка простых фреймов, использует LoadURL*)
.....................................
constructor TLoader.Create(const Str,Text:string);
begin
inherited Create(False); (*Поток создаем в состоянии ЗАПУСК*)
FIdHttp := TIdHTTP.Create(nil);
FSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
FCompressZLib:=TIdCompressorZLib.Create(FIdHttp);
FStream:=TMemoryStream.Create;
FreeOnTerminate := True; (* Поток освободит ресурсы при окончании работы*)
Self.Priority := tpNormal;
FUrl:=Str;
FText:=Text;
end;
..................................
function TLoader.LoadURL(const Url: String):string;
begin
FIdHttp.IOHandler:=FSSL;
FIdHttp.Compressor:=FCompressZLib;
FIdHttp.Get(Url, FStream);
end; (*очень упрощенная версия кода*)Однако метод LoadURL при загрузке страниц на ФРЕЙМ может вызывться (в выше стоящей функции LoadHtmlPage) многократно Вопрос: правильно ли создавать объекты в конструкторе или надо перенести их создание в метод LoadURL , с точки зрения правильного кодирования Код:
function TLoader.LoadURL(const Url: String):string; begin FIdHttp := TIdHTTP.Create(nil); FStream := TMemoryStream.Create; SSL:=TIdSSLIOHandlerSocketOpenSSL.Create; CompressZLib:=TIdCompressorZLib.Create(FIdHttp); FIdHttp.IOHandler:=FSSL; FIdHttp.Compressor:=FCompressZLib; FIdHttp.Get(Url, FStream); FreeAndNil(FStream); FreeAndNil(SSL); FreeAndNil(CompressZLib); FreeAndNil(FIdHttp); end; (*очень упрощенная версия кода*) |