Главная страница
    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.078 c
15-1330287987
Дмитрий С
2012-02-27 00:26
2013.03.22
Меня иногда удивляет, как можно придумывать вообще такое?


2-1338481759
NatashaZ
2012-05-31 20:29
2013.03.22
Поток и ShowModal (Delphi2009)


15-1339966494
Jeer
2012-06-18 00:54
2013.03.22
Вело-Вапдай


15-1342010746
alexdn
2012-07-11 16:45
2013.03.22
java скрипт


15-1345802495
cwl
2012-08-24 14:01
2013.03.22
Unicode в идентификаторах





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский