Главная страница
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.094 c
15-1332451802
Юрий
2012-03-23 01:30
2013.03.22
С днем рождения ! 21 марта 2012 среда


2-1340622845
Ele
2012-06-25 15:14
2013.03.22
Цикл по полям записи


15-1337805002
Юрий
2012-05-24 00:30
2013.03.22
С днем рождения ! 24 мая 2012 четверг


3-1276771669
_REA
2010-06-17 14:47
2013.03.22
Одна таблица или несколько?


15-1335792488
Knight
2012-04-30 17:28
2013.03.22
Триггер в FireBird