Главная страница
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.054 c
4-1259572252
keymaster
2009-11-30 12:10
2013.03.22
Работа с POS-принтером.


15-1330443309
pasha_golub
2012-02-28 19:35
2013.03.22
IPC в MacOS&Win средствами Delphi XE2


15-1335609759
Тут иногда бываю
2012-04-28 14:42
2013.03.22
Как точно располагать Gui в редакторе?


2-1342090207
sas9568635
2012-07-12 14:50
2013.03.22
Команды КР580 в виде Дельфи процедур


15-1345840202
Юрий
2012-08-25 00:30
2013.03.22
С днем рождения ! 25 августа 2012 суббота