Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 08:35   #1
profaller
Новичок
Джуниор
 
Регистрация: 08.02.2011
Сообщений: 2
По умолчанию THTTPCli, обработчик события выполняется в контексте основного потока

ну вообщем есть что-то типа

Код:
type
  TSomeThread = class(TThread)
  private
    procedure HTTPClientRequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word);
  ...

procedure HTTPClientRequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word);
begin
  ...
end;


constructor TSomeThread.Create;
  ...
  HTTPClient := THttpCli.Create(nil);
  HTTPClient.OnRequestDone := HTTPClientRequestDone;
ну так вот, данный оброботчик почему-то выполняется в контексте основного потока, а не того который его инициировал. вообщем порылся в исходниках ентого компонента, но увы, ничего особо не понял. вот и надеюсь, может кто из форумчан уже сталкивался с этим западлом. хелп вообщем.
profaller вне форума Ответить с цитированием
Старый 08.02.2011, 12:24   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> а не того который его инициировал

А в твоем коде никакой инициацией и не пахнет.
Где она, инициация-то ?
mss вне форума Ответить с цитированием
Старый 08.02.2011, 12:29   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> в контексте основного потока, а не того который его инициировал

так и инициирован он, судя по всему, в основном потоке.
Перенеси код из TSomeThread.Create() в перекрытый TSomeThread.Execute(); тогда и будет инициализация не в основном потоке.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.02.2011, 14:23   #4
profaller
Новичок
Джуниор
 
Регистрация: 08.02.2011
Сообщений: 2
По умолчанию

Цитата:
А в твоем коде никакой инициацией и не пахнет.
Где она, инициация-то ?
да какая разница та, ну вот например инициация события OnRequestDone

Код:
procedure TSomeThread.Execute();
...
HTTPClient.Get;
...
вот код из исходников либы

Код:
procedure THttpCli.WMHttpRequestDone(var msg: TMessage);
...
    if Assigned(FOnRequestDone) then
        FOnRequestDone(Self, FRequestType, FRequestDoneError);
...
поидее все должно распрекрасно работать, ан нет, не хотит. почему-то этот код обрабытывается в основном потоке. там у них (ICS) все на сообщениях построенно, и разобраться я никак не могу че там да как.
profaller вне форума Ответить с цитированием
Старый 08.02.2011, 16:25   #5
exn
Пользователь
 
Регистрация: 06.02.2011
Сообщений: 51
По умолчанию

Я всегда думал, что главное достоинство ics то, что у нее основной режим работы асинхронный. )
В пятой версии этой либы, есть нужные вам примеры.
exn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
THttpCli + gzip (Компоненты ICS) X11 Работа с сетью в Delphi 4 13.09.2010 10:01
С# Элемент а1 не существует в данном контексте boris-blade Общие вопросы .NET 4 05.03.2010 20:49
Сбой обновления основного вайла, патч отменен. Сбой CRC основного файла. Naruto63 Помощь студентам 2 21.10.2009 20:28
Создание события потока Arteom Общие вопросы Delphi 9 11.01.2008 21:16