![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как грамотно отключить от IdTCPServer всех IdTCPClient
Layner © (2006-11-17 15:40:00)Опять пример "IdTCPDemo"... При закрытии сервера - если были подключены клиенты, то сервер выдает ошибку. Поэтому добавил проц. отключения, код ниже. Сама по себе работает без ошибочно, но если данный код поместить в
OnClose сервера, то код не отрабатывает, пишет ошибку "Terminate Thread Timeout"
procedure Tfmain.Button2Click(Sender: TObject);
var
i: integer;
RecClient: PClient;
RecThread: TIdPeerThread;
begin
with Clients.LockList do
try
for i := 0 to Count-1 do
begin
RecClient := Items[i];
RecThread := RecClient.Thread;
RecThread.Connection.Socket.Close;
end;
finally
Clients.UnlockList;
end;
end;
DVM (2006-11-17 16:17:00) [1]Такое ощущение, что примеры от Indy писали люди, которые сами не понимают как Indy работает. Там сплош и рядом обращения из вторичных потоков в главный без всякой синхронизации и.т.д.
untermensch (2006-11-17 15:55:00) [2]OnClose срабатывает из основного потока после остановки сервера, потому и не поможет. Хотя странно, у меня вроде сервер ошибок не выдавал, а вот некоторые сокетные клиенты выдавали.
Но вообще при закрытии сервера надо тогда вначале терминировать всех клиентов а потом уже останавливать и разрушать сервер.