Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.068 c
15-1343315733
brother
2012-07-26 19:15
2013.03.22
С днем системного администратора


2-1337351793
ply
2012-05-18 18:36
2013.03.22
Потоки - проверка на существование


15-1348299645
Дмитрий Белькевич
2012-09-22 11:40
2013.03.22
Ищу компонент для создания вистовских окон. Картинка в теме.


15-1339000608
alexdn
2012-06-06 20:36
2013.03.22
Умер Рэй Брэдбери


15-1345119186
stas
2012-08-16 16:13
2013.03.22
Расчет площади сложной фигуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский