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

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

процедура возвращающая параметр заполняемые в потоке [D6, D7, 2000, XP, 2003]


Страницы:   1 2

antonn ©   (2009-09-20 18:12:00) 

Вот, значит :)
Есть некий класс, с методом
SendPOST(const URL:string; response:string)

делает он то, что отправляет хттп POST-запрос на сервер. Хочу выделить для этого доп.поток, но так, чтобы обходиться функцией с приведенными параметрами и не вводить обработчиков вызываемых при отработке потока (метод уже используется в других классах, переписывать много).
Пока только придумал делать бесконечный цикл в котором ждать отклика потока об успешной операции (ну и добавить sleep(1) да application.ProcessMessages). Есть более нормальное решение? :)


antonn   (2009-09-20 20:50:00) [21]

Инди - это такие маленькие офисные игрушки, да?


Медвежонок Пятачок   (2009-09-20 20:47:00) [22]

для этих случаев есть TidAntiFreeze


antonn   (2009-09-20 20:43:00) [23]


> Медвежонок Пятачок ©   (20.09.09 20:03) [5]
>
> зачем тебе поток и зачем тебе его ожидание, если и без потока
> и без ожидания все будет точно так же как и с потоком и
> с ожиданием?

->

> да ну :)


с потоком форма не "залипает", можно прикрутить человеческую анимацию этого процесса


Медвежонок Пятачок   (2009-09-20 20:03:00) [24]

зачем тебе поток и зачем тебе его ожидание, если и без потока и без ожидания все будет точно так же как и с потоком и с ожиданием?


antonn   (2009-09-20 19:53:00) [25]

да ну :)
function THTTPClient.SendPostURL(const URL:string; const Data:tmemorystream):boolean;
var PacingCounter:int64;
begin
 result:=false;
 PacingCounter:=GetTickCount;
 FPostResponsed:=-1;
 THTTPPOSTNode.create(0,ProxyHost,ProxyPort,ProxyUser,ProxyPass,url,data);
 while not(application.terminated) do begin
   if(FPostResponsed>-1) then begin
     result:=true;
     //комплит
     exit;
   end;
   if (GetTickCount-PacingCounter>10000) then begin
 
      break;
   end;
   sleep(1);
   application.ProcessMessages;
 end;
end;

THTTPPOSTNode - класс доп.потока, FPostResponsed - флаг меняемый когда поток закончит работу (после окончания он уведомляет об этом родителя).
Разумеется с таким подходом нельзя подряд быстро вызывать SendPostURL, флаг то один, но мне это не нужно. Форма и контролы на ней живут обычной жизнью, и ничего не напоминает зависания. Просто мне сам способ такой кажется костыльным :)


Ega23   (2009-09-20 19:39:00) [26]


> вызывает метод моего класса, который услужливо должен отдать
> им результат запроса на сервер.

Если у тебя в основном потоке стоит ожидание результата - ты хоть апстену убейся, но доп.поток тебя не спасёт. Никак. Хоть 9000 потоков навешивай.


antonn   (2009-09-20 19:10:00) [27]

Потому что без него все приложение подвисает. Часть программы, написаной не мной, и править эту часть я не могу, вызывает метод моего класса, который услужливо должен отдать им результат запроса на сервер.
я же использую другие классы для отправки которые при выполнении и "вешают" все приложение, мой класс их только обслуживает. Хочу вынести часть кода делающего запрос в доп. поток.

Sleep(1) "визуально разгружает" проц :)


Ega23   (2009-09-20 18:54:00) [28]

Бред какой-то. Зачем тебе доп.поток тогда нужен?
И нафига sleep(1) если ProcessMessages уже вызвал?


Страницы:   1 2

Наверх

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