Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

IdTCPServer - Terminate Thread Timeout   Найти похожие ветки 

 
BanderLog   (2005-05-19 13:35) [0]

Помогите разобраться. Использую комоненты Indy 9.
К серверу подключаются клиенты, после чего пытаюсь сделать Server.Active := False. В итоге выпадает вышеупомянутая ошибка. На сервере сделал процедуру:


procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
with Server.Threads.LockList do
 try
  Memo1.Lines.Add("Подключений: " + IntToStr( Count));
  for i := Count-1 downto 0 do
   begin
    Memo1.Lines.Add("");
    Memo1.Lines.Add("Подключение №" + IntToStr( i));
    Memo1.Lines.Add(" имя - " + TIdPeerThread(Server.Threads.LockList[i]).Connection.LocalName);
   end;
 finally
   Server.Threads.UnlockList;
 end;
end;


По нажатию показывает сколько коннектов к серверу, но если у меня было, допустим 3 коннекта, и один из клиентов отключился, данная порцедура все равно показыват 3 коннекта. И при попытке закрыть программу опять таже ошибка. :(
Подскажите почему так происходит и как с этим бороться....


 
Eraser ©   (2005-05-19 14:35) [1]

BanderLog   (19.05.05 13:35)

Ошибка в том, что коннект (событие OnExecute) завершается некорректно. Т.е. поток не уничтожается.


 
BanderLog   (2005-05-20 07:04) [2]

Тогда как заставить его завершить нормально? Так что бы поток уничтожился.... :(


 
Eraser ©   (2005-05-20 13:50) [3]

BanderLog   (20.05.05 07:04) [2]

В ервую очередь "загнать" все потенциально опасные участки кода в OnExecute в секции try...except(finally) и при возникновении ошибки немедленно ставить флаг Terminated у текущего потока.


 
KorvinOE   (2005-05-28 14:02) [4]

Попробу так:

procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
begin
with AThread.Connection do
  try
   {
     Твои команды ...
   }
  finally
   Disconnect;
  end;
end;


 
Eraser ©   (2005-05-28 17:53) [5]

KorvinOE   (28.05.05 14:02) [4]

Немного не так надо.
Метод Disconnect тоже необходимо выполнять в защищённой секции:

try
 Disconnect;
except
end;


 
KorvinOE ©   (2005-06-01 21:17) [6]

Я заметил эту ошибку и у себя. Я никак не могу справиться с TimeOut при приёме сообщения и пробывал выставить у TIdTCPServer свойство TerminateWaitTime. Оно по умолчанию равно 5000. Я его поставил равным 1 и у меня появилась эта ошибка и не помогали никакие try. Но когда вернул значение назад то ошибка больше не появляется.


 
Eraser ©   (2005-06-01 21:40) [7]

KorvinOE ©   (01.06.05 21:17) [6]

Так с какого перепугы ты ставил TerminateWaitTime = 1 миллисекунде? Естественно ошибка будет... никакое соединение не установится за 1 мс. Поставь хотя бы 500-1000.


 
KorvinOE ©   (2005-06-01 22:49) [8]

Да всё с той же перепуги, что TimeOut не пашет



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
2-1124107398
alexandr-m
2005-08-15 16:03
2005.09.25
Простой вопрос по потокам (как его чёрт возьми запустить)


1-1125775015
xayam
2005-09-03 23:16
2005.09.25
Многострочная палитра


2-1123885149
Витёк
2005-08-13 02:19
2005.09.25
Обработка события входа и выхода курсора мыши!


1-1124634033
Дмитрий_05
2005-08-21 18:20
2005.09.25
Как избавиться от двойной прорисовке окна


14-1124718189
Diaskhan
2005-08-22 17:43
2005.09.25
Как можно войти в группу програмистов