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

Вниз

TIdTCPServer   Найти похожие ветки 

 
Ozone ©   (2004-04-15 12:52) [0]

При закрытии сервера если были подключены клиенты - выдается сообщение "Termnate Thread timeout". Я так полагаю, что их (клиентов) нужно перед этим насильственно отрубать. Как это сделать?


 
DevelS   (2004-04-15 13:03) [1]

with TCPServer.ThreadMgr.ActiveThreads.LockList do
 try
   for I := 0 to Count - 1 do
   try
     TIdPeerThread(Items[I]).Connection.Disconnect();
   except
     TIdPeerThread(Items[I]).Stop;
   end;
 finally
   TCPServer.ThreadMgr.ActiveThreads.UnlockList;
 end;


 
Verg ©   (2004-04-15 13:04) [2]


> Ozone ©   (15.04.04 12:52)  
> При закрытии сервера если были подключены клиенты - выдается
> сообщение "Termnate Thread timeout". Я так полагаю, что
> их (клиентов) нужно перед этим насильственно отрубать. Как
> это сделать?


Значит в OnExecute что-то не то сделано.


 
Ozone ©   (2004-04-15 13:33) [3]

TO Verg[2]

if not AThread.Terminated and AThread.Connection.Connected then begin
try
  sType := AThread.Connection.ReadLn();
  size  := AThread.Connection.ReadLn();
  AThread.Connection.ReadStream(_file, StrToInt(size), false);
  /*..*/
 except
 end;
end;


Что не так? Может что-то забыл?

TO DevelS[1]

Спасибо, но не помогает.


 
BlackTr   (2004-04-15 13:43) [4]

А если в OnExecute, в конце написать AThread.Connection.Disconnect; ?


 
Verg ©   (2004-04-15 13:49) [5]

Что происходит в /*..*/ ?


 
Ozone ©   (2004-04-15 13:50) [6]

TO BlackTr[4]

И что? Он примет и отключит. Мне токого не надо....


 
Ozone ©   (2004-04-15 13:51) [7]

TO Verg ©[5]

Там принятая картинка сохраняется в БД и выводится на экран.


 
Verg ©   (2004-04-15 13:54) [8]


> Ozone ©   (15.04.04 13:51) [7]
> TO Verg ©[5]
>
> Там принятая картинка сохраняется в БД и выводится на экран.


Я так понимаю, что через synchronize?

Если это происходит достаточно долго, либо с ожиданием чего-нибудь, то вполне вероятна "Termnate Thread timeout".


 
Ozone ©   (2004-04-15 13:59) [9]

TO Verg ©[8]

Т.е. надо перед этим еще раз Terminate проверять?


 
Verg ©   (2004-04-15 14:04) [10]


> Ozone ©   (15.04.04 13:59) [9]
> TO Verg ©[8]
>
> Т.е. надо перед этим еще раз Terminate проверять?


При чем тут Terminate.
Я не вижу что и как делается в /*..*/.
Если бы клиентский поток просто висел на Connection.Readln или connection.ReadStream, то все было-бы ок. Если же он говорит, что таймаут завершения потока, значит твой поток висит где-то или чем-то своим занят, заглушив все Exception или не обращаясь к connection или.... да много каких "или" может быть.


 
BlackTr   (2004-04-15 14:07) [11]

А что сервер должен делать ?
Вполне вероятно, что вам нужны не блокирующие сокеты.


 
Ozone ©   (2004-04-15 14:20) [12]

TO BlackTr[11]

Он должен принимать картинки от клиентов, сохраниять их в БД и выводить на экран.


 
BlackTr   (2004-04-15 14:21) [13]

Так принял, сохранил, вывел на экран, и отрубил клиента :)


 
Ozone ©   (2004-04-15 14:23) [14]

To Verg ©[8]

> Я так понимаю, что через synchronize?

Через CriticalSection.


 
Ozone ©   (2004-04-15 14:24) [15]

TO BlackTr[13]

Дык надо много принимать.


 
Verg ©   (2004-04-15 14:32) [16]


> Ozone ©   (15.04.04 14:23) [14]
> Через CriticalSection.


Проблему я тебе объяснил - твой поток "застревает" в /*..*/

Где, как и почему, выяснять придется самому - кода нет, а если там еще и какая-нибудь "База данных", то там все что угодно может быть - может встать на блокировке записи, таблицы, на подключении к серверу и еще тысяча и одна причина....


 
Ozone ©   (2004-04-15 14:36) [17]

TO Verg ©[16]

Понятно. Будем думать.


 
BlackTr   (2004-04-15 14:45) [18]

Так ведь вроде когда OnExecute заканчивается, поток все равно висит ???


 
Ozone ©   (2004-04-15 14:51) [19]

TO BlackTr[18]

Да, но если клиенту нужно передать 5 картинок в сек, то имхо, по твоему это не удасться сделать - будет траться много времени на постоянно подключение.

Проще один раз подключиться и работать, работать, работать...


 
Verg ©   (2004-04-15 14:53) [20]


> BlackTr   (15.04.04 14:45) [18]
> Так ведь вроде когда OnExecute заканчивается, поток все
> равно висит ???


Конечно. Только не висит, а снова вызывает OnExecute, если нет признаков разрыва соединения или остановки потока.



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

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

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1084586814
IrBisoff
2004-05-15 06:06
2004.05.30
Немного глуповат вопрос, но StrLeft не обрабатывает строку.


14-1084088162
Cerber
2004-05-09 11:36
2004.05.30
Интерненет


3-1083670240
maxz
2004-05-04 15:30
2004.05.30
FindKey


3-1083913960
}|{yk
2004-05-07 11:12
2004.05.30
Логическая ошибка в триггере


14-1084340647
Vitas2
2004-05-12 09:44
2004.05.30
ShareIt