Вниз
Скачать: CL | DM;

Server.Сlose=error??   Найти похожие ветки 

 
zyx ©   (2004-05-03 12:54) [0]

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


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

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

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


 
zyx ©   (2004-05-03 21:50) [2]

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


 
zyx ©   (2004-05-06 20:32) [3]

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


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


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


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


 
zyx ©   (2004-05-06 23:32) [5]

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


 
Verg ©   (2004-05-06 23:56) [6]


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


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

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

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

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


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

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



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
14-1087112602
Kolyan
2004-06-13 11:43
2004.07.04
Linux Mandrake 10


3-1086853755
Alex_x
2004-06-10 11:49
2004.07.04
Как сравнить две базы Акссесс


1-1087908262
BFG9k
2004-06-22 16:44
2004.07.04
Количество дочерних компонентов


14-1087113192
iZEN
2004-06-13 11:53
2004.07.04
Цифровой разрыв.


3-1086806406
VitGun
2004-06-09 22:40
2004.07.04
Связь "клиента" и "сервера". Как лучше?




   Наверх