Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПеренос проекта 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.086 c