Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Замена указателей на Локал.Перем при работе функции в потоке


Pcrepair ©   (2013-01-17 14:07:00) 

Добрый день. есть код загрузчика, использующий указатели:

function LoadPage(const Url: String): RawByteString;
var
 HTTP: TIdHTTP;
 HtmlPage: TMemoryStream;
 T:TStringList;
begin
 T:=TStringList.Create;
 HTTP := TIdHTTP.Create(nil);
 try
   HtmlPage := TMemoryStream.Create;
   try
     HTTP.HandleRedirects := True;
     HTTP.Get(Url, HtmlPage); (*получаем данные в поток памяти*)
     (*------------------------------------------*)
     SetLength(Result, HtmlPage.Size);
     Move(HtmlPage.Memory^, Pointer(Result)^, HtmlPage.Size);
     (*------------------------------------------*)
   finally
     FreeAndNil(HtmlPage);
   end;
 finally
   FreeAndNil(HTTP);
   FreeAndNil(T);
 end;
end;


и такой код, использующий локальную переменную Т

function LoadPage(const Url: String): RawByteString;
var
 HTTP: TIdHTTP;
 HtmlPage: TMemoryStream;
 T:TStringList;
begin
 T:=TStringList.Create;
 HTTP := TIdHTTP.Create(nil);
 try
   HtmlPage := TMemoryStream.Create;
   try
     HTTP.HandleRedirects := True;
     HTTP.Get(Url, HtmlPage); (*получаем данные в поток памяти*)
     (*---------------------------*)
       HtmlPage.Position:=0;
       T.LoadFromStream(HtmlPage);
       Result:=T.Text;
     (*---------------------------*)
   finally
     FreeAndNil(HtmlPage);
   end;
 finally
   FreeAndNil(HTTP);
   FreeAndNil(T);
 end;
end;


Внимание! Вопрос:
- какой вариант функции предпочтительнее для использования в потоке (многопоточная загрузка страниц), учитывая использование памяти.
- не будет ли в первом варианте вероятности использования одних и тех же сегментов памяти разными потоками


brother   (2013-01-17 15:59:00) [1]

количеством берешь? теперь на тебя уже три! сайта работают ;)


Сергей М.   (2013-01-17 14:44:00) [2]


> Замена указателей на Локал.Перем


В упор не вижу ничего подобного ни в одном варианте.
Но попкорном на всякий случай запасся)


Slym   (2013-01-17 14:31:00) [3]

+1
http://www.programmersforum.ru/showthread.php?t=225368


Игорь Шевченко   (2013-01-17 14:23:00) [4]

Запасаемся попкорном
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=997762


sniknik   (2013-01-17 14:17:00) [5]

> - какой вариант функции предпочтительнее
Result:= HTTP.Get(Url); (*получаем данные в поток памяти*)

> - не будет ли в первом варианте вероятности использования одних и тех же сегментов памяти разными потоками
обоих будут... это же твой код! (хотя и нет кода потока/взаимосвязей, но результат ожидаем)


Наверх

Титульная страница Поиск, карта сайта Написать письмо