Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Перенос проекта Indy 9 > Indy 10. Проблема с IdTCPServerExecute.   Найти похожие ветки 

 
Indy 10   (2010-01-03 15:33) [0]

Хочу перенести проект с Indy 9 / D7 на Indy 10 D2010.
Есть такая проблема: событие OnIdTCPServerExecute вызывается много раз на одно соединение, в D7 оно вызывалось только один раз.

Почему это происходит (куски кода из IdThread):


             if Loop then begin
               while not Stopped do begin
                 try
                   Run;
                 except
                   on E: Exception do begin
                     if not HandleRunException(E) then begin
                       Terminate;
                       raise;
                     end;
                   end;
                 end;
               end;


Тред создаётся с включенным флагом Loop. Дальше цикл while not Stopped бесконечно зацикливается. В Run вызывается OnIdTCPServerExecute.

Флаг Stopped же никогда не поднимается:


     Result := Terminated or (itoStopped in FOptions) or Suspended;


Terminaded или Suspended всегда False. До itoStopped in FOptions можно добраться через TIdThread.Stop. Но не могу в OnIdTCPServerExecute добраться до треда TIdThread, который и вызвал OnIdTCPServerExecute.

Скажите, что я делаю не так?


 
Сергей М. ©   (2010-01-03 21:23) [1]


> не могу в OnIdTCPServerExecute добраться до треда TIdThread,
>  который и вызвал OnIdTCPServerExecute


Что значит "не могу" ?


 
Indy 10   (2010-01-04 10:29) [2]

Не знаю через какое свойство из TIdContext до TIdThread добраться.


 
Indy 10   (2010-01-04 18:11) [3]

Попробовал обратиться как здесь: http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=52807 :

TidThread(AContext.Yarn).Stop

Ничего хорошего, конечно не вышло. Больше идей нет.


 
Indy 10   (2010-01-04 18:35) [4]

Ну, вроде нашёл :)

TIdYarnOfThread(AContext.Yarn).Thread.Stop;

Не знаю, насколько верно, но очень похоже на правду.


 
Сергей М. ©   (2010-01-04 21:53) [5]

Эк тебя занесло..

А всего-то и требовалось:

TIdPeerThread(AContext).Connection.Disconnect


 
Indy 10   (2010-01-05 01:43) [6]


> А всего-то и требовалось:TIdPeerThread(AContext).Connection.
> Disconnect


А какое отношение AContext имеет к TIdPeerThread?

TIdContext = class(TIdTask)

TIdTask = class(TObject)


 
Сергей М. ©   (2010-01-05 18:38) [7]

Короче, идешь сюда (и не вылазь оттуда, пока не разберешься в иерархии):

http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=IdContext_pas.html

и наблюдаешь там объектное св-во Connection у объекта AContext.

Так вот у объекта Connection есть метод Disconnect, вызов которого приводит к штатному завершению того самого цмкла, о котором ты ведешь речь.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
1-1304082189
Alik
2011-04-29 17:03
2013.03.22
Delphi и контроль сигнала 3G модема


2-1338443775
Demo
2012-05-31 09:56
2013.03.22
Настроить Delphi 2007


15-1339432139
Лаура
2012-06-11 20:28
2013.03.22
Компоненты


2-1331031997
Scott Storch
2012-03-06 15:06
2013.03.22
приводить к типу DWORD


15-1333892049
xayam
2012-04-08 17:34
2013.03.22
mono ttf utf-8