Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Server.Сlose=error?? [D6, D7, WinXP]


zyx ©   (2004-05-03 12:54:00) 

Всем привет! Подскажите пожалуйста: как закрыть сервак при дисконнекте клиента? Использую serversocket,client socket, неблокирующий режим. Если клиент отсоеденился, то мне неоюходимо завершить прослушивание порта серваком. В обработчике OnClientDisconnect пишу server.close и как только выхожу из обработчика то вываливается куча ошибок, например такая: попытка выполнить оперцию над обьектом не являющимся сокетом Api closesocket (ну или что-то вроде етого). Я так понимаю значит нельзя сервак закрывать до выхода из обработчика события OnClientDisconnect. Можно ли как нибудь ето обойти кроме того как использовать таймер? Заранее блогадарен за помощь.


zyx   (2004-05-07 00:35:00) [1]

to VergСпасибо за ответ!


Verg   (2004-05-06 23:56:00) [2]


> zyx ©   (06.05.04 23:32) [5]
> //Почему не катит? В чем проблема?
> Ведь может сложиться такая ситуация (взависимотси от загрузки
> проца), что процедура которая обрабатывает посланное через
> PostMessage сообщение выполниться перед end'ом?


Ни в коем разе. Дело все происходит в одном потоке (главном). Ты вызываешь PostMessage в обработчике подобных им сообщений. Эта функция просто ставит сообщение в очередь сообщений данному окну, принадлежащему данному потоку и на этом ее ф-ции заканчиваются.

"На пальцах", упрощенный цикл обработки сообщений:

while true do
begin
 GetMessage(....); // Здесь мы извлекаем следующее сообщение из очереди, если оно там есть
 DispatchMessage(...); //Вот здесь произойдет вызов обработчика взятого с очереди сообщения и, соответственно, пока тот не завершит свои действия, цикл обработки не продолжится. В этом обработчике на очередь сообщений могут быть установлены другие сообщения, но они будут просто установлены в очередь, а их обработка произойдет только на следующих итерациях приведенного цикла
end;

То, чего ты испугался может произойти если вместо PostMessage ты применишь SendMessage, которая при этих же условиях приведет прямо к вызову обработчика этого сообщения, а не к установке сообщения в очередь.


zyx   (2004-05-06 23:32:00) [3]

//Почему не катит? В чем проблема?
Ведь может сложиться такая ситуация (взависимотси от загрузки проца), что процедура которая обрабатывает посланное через PostMessage сообщение выполниться перед end'ом?


Verg   (2004-05-06 22:41:00) [4]


> zyx ©   (06.05.04 20:32) [3]
> PostMessage не катит.


Почему не катит? В чем проблема?


zyx   (2004-05-06 20:32:00) [5]

PostMessage не катит. Народ может кто-нибудь сталкивался с такой проблемой? Помогите плиз, ну очень надо...


zyx   (2004-05-03 21:50:00) [6]

Подойдет или нет я не знаю потому-что не могу как раз ето реализовать((( Может кто-нибудь подскажет как это сделать?


SergP   (2004-05-03 13:00:00) [7]

>понимаю значит нельзя сервак закрывать до выхода из обработчика события
>OnClientDisconnect

А PostMessage не подойдет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо