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

Вниз

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

Наверх





Память: 0.49 MB
Время: 0.036 c
1-1084891319
Mameluke
2004-05-18 18:41
2004.05.30
Отображение верхнего и нижнего индексов в TRTFLabel


14-1084048044
Rouse_
2004-05-09 00:27
2004.05.30
Всеже позволю себе смелость....


8-1080052987
Pa5ha
2004-03-23 17:43
2004.05.30
Сохранение изображения на холсте в Direct3D


3-1084283277
nova
2004-05-11 17:47
2004.05.30
Список серваков sql server в delphi


1-1084959163
Vadim X
2004-05-19 13:32
2004.05.30
Int64 ??? Overflow





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