Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.01.2013, 14:00
Pcrepair
 
Сообщения: n/a
По умолчанию Замена указателей на Локал. Перем при работе функции в потоке

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

Код:
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;

Внимание! Вопрос:
- какой вариант функции предпочтительнее для использования в потоке (многопоточная загрузка страниц), учитывая использование памяти.
- не будет ли в первом варианте вероятности использования одних и тех же сегментов памяти разными потоками
Ответить с цитированием
  #2  
Старый 17.01.2013, 14:37
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

В первой функции указатели вообще не нужны (да и не верно используются), есть нормальный метод Read.

Теперь ответы:
Оба варианта одинакого плохи.
Нет не будет.

Почему плохи, потому что избыточны. Есть вариант TidHTTP.Get который читает прямо в строку.

ЗЫЖ Срочно убери ссылку из подписи
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 17.01.2013, 20:53
Pcrepair
 
Сообщения: n/a
По умолчанию

Цитата:
Сообщение от Aristarh Dark
В первой функции указатели вообще не нужны (да и не верно используются), есть нормальный метод Read.
Если можно, поподробнее, о чем вообще речь? метод Read ЧЕГО?
Ответить с цитированием
  #4  
Старый 17.01.2013, 23:59
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

TMemoryStream.Read
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 18.01.2013, 09:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

Код:
Result:=IdHTTP1.Get('');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 18.01.2013, 21:04
Pcrepair
 
Сообщения: n/a
По умолчанию

а теперь загрузи к примеру:
http://edu.zelenogorsk.ru/projs/eko/braun/edu3.html
и посмотри что будет с кодировкой(РАД ХЕ3 у тебя надеюсь есть?)
лыбиться потом будешь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:15.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025