Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
4-1122636287
Subdigger
2005-07-29 15:24
2005.09.25
GetProp и SetProp


8-1115611310
Viktop
2005-05-09 08:01
2005.09.25
Проиграть музыку из ресурса


14-1125625951
vidiv
2005-09-02 05:52
2005.09.25
Как изменить владельца файла?


9-1117187265
Архитектор
2005-05-27 13:47
2005.09.25
[GlScene] SkyDome


14-1125585884
Anat
2005-09-01 18:44
2005.09.25
FORTRAN -> DELPHI





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