![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перенос проекта Indy 9 > Indy 10. Проблема с IdTCPServerExecute. [WinXP]
Indy 10 © (2010-01-03 15:33:00)Хочу перенести проект с 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-05 18:38:00) [1]Короче, идешь сюда (и не вылазь оттуда, пока не разберешься в иерархии):
http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=IdContext_pas.html
и наблюдаешь там объектное св-во Connection у объекта AContext.
Так вот у объекта Connection есть метод Disconnect, вызов которого приводит к штатному завершению того самого цмкла, о котором ты ведешь речь.
Indy 10 (2010-01-05 01:43:00) [2]
> А всего-то и требовалось:TIdPeerThread(AContext).Connection.
> Disconnect
А какое отношение AContext имеет к TIdPeerThread?
TIdContext = class(TIdTask)
TIdTask = class(TObject)
Сергей М. (2010-01-04 21:53:00) [3]Эк тебя занесло..
А всего-то и требовалось:
TIdPeerThread(AContext).Connection.Disconnect
Indy 10 (2010-01-04 18:35:00) [4]Ну, вроде нашёл :)
TIdYarnOfThread(AContext.Yarn).Thread.Stop;
Не знаю, насколько верно, но очень похоже на правду.
Indy 10 (2010-01-04 18:11:00) [5]Попробовал обратиться как здесь: http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=52807:
TidThread(AContext.Yarn).Stop
Ничего хорошего, конечно не вышло. Больше идей нет.
Indy 10 (2010-01-04 10:29:00) [6]Не знаю через какое свойство из TIdContext до TIdThread добраться.
Сергей М. (2010-01-03 21:23:00) [7]
> не могу в OnIdTCPServerExecute добраться до треда TIdThread,
> который и вызвал OnIdTCPServerExecute
Что значит "не могу" ?