Главная страница
    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.46 MB
Время: 0.034 c
3-1123832912
AloneAli
2005-08-12 11:48
2005.09.25
Не могу в DBGridEh сделать выбор из другой таблицы в виде ComboBo


2-1124434319
Ande
2005-08-19 10:51
2005.09.25
Можна ли добавлять динамически пункты меню в MainMenu?


1-1125783213
kami
2005-09-04 01:33
2005.09.25
Потеря цвета в TImage


3-1123398152
Киря
2005-08-07 11:02
2005.09.25
DBLookUpComboboxEh с двумя ключевыми полями


3-1123617870
carmen
2005-08-10 00:04
2005.09.25
Экспорт средствами Firebird





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