Текущий архив: 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