![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день, уважаемые форумчане.
Возникла такая проблема: в программе используется TServerSocket в режиме stNonBlocking, принимает сообщения и отправляет их в ответ. Также имеется процедура, которая циклично через Server.Socket.Connections[i].SendText отправляет данные клиентам: Код:
procedure TGProcessing.Multicast(st: String; exceptClient: TGLNumber); var i:Byte; temp:integer; begin if self.Count <= 0 then Exit; temp := 0; if length(st) > 0 then begin for i := 0 to self.Server.Socket.ActiveConnections - 1 do begin if self.Client[exceptClient].SocketHandle <> self.Server.Socket.Connections[i].Handle then temp := temp + self.Server.Socket.Connections[i].SendText(st); end; end; self.FSend := self.FSend + temp; end; В момент, если происходит отключение клиента, постоянно вываливается ошибка. Ошибка вываливается при обращении к self.Client в различных частях программы, но, как удалось установить, причина именно в отключении клиента. Сам экземпляр Client не удаляется, а уходит в пул, поэтому он заведомо существует. Даже если его не существует, везде стоят проверки if assigned (Client) then. Поэтому возникают три вопроса: 1) почему возникает подобная ошибка? 2) как ее можно избежать? 3) поможет ли режим stThreadBlocking для решения проблемы? Пока что не берусь переписывать код, вдруг кто-то встречался с подобным, а делать теоретически бесполезную работу не хочется, не будучи уверенным. Спасибо за ответы. |