Главная страница
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.035 c
14-1125495622
Lamer@fools.ua
2005-08-31 17:40
2005.09.25
Reporting Services 2000: мультиязыковость


14-1125502212
БарЛог
2005-08-31 19:30
2005.09.25
Задачки по Си


1-1125559683
Суслик
2005-09-01 11:28
2005.09.25
Свой менеджер памяти


14-1125432179
Nous Mellon_
2005-08-31 00:02
2005.09.25
Форматирование HTML-кода


9-1117097360
Buzzz
2005-05-26 12:49
2005.09.25
Аналог TMemo в GLScene