IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Сообщение от сокета о приходе сообщения.
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я хочу ловить сообщения от сокета через GetMessage.
В общем суть такова.
Есть оконная программа, которая большую часть времени, понятно, ждёт сообщения от пользователя или системы. Она работает только тогда, когда приходит сообщение. Но тут мне понадобилось добавить сетевой режим. Понятно, надо чтобы программа работала только когда приходит сообщение в GetMessage или из сокета. Ну и стал вопрос - когда проверять сокет на наличие сообщений? Если делать это непрерывно в главном цикле, то программа загрузит процессор, плохо. Если делать только в ответ на сообщения GetMessage, то программа не будет проверять сеть, пока пользователь не двинет мышкой (или ещё что), плохо. Делать по таймеру тоже как-то не очень, потому что сообщения могут прийти чаще, а могут прийти и реже, чем сработает таймер.
Делать лишний поток, который в блокирующем режиме ждёт сообщение от сокета, а потом посылает окну информацию о приходе через SendMessage - ну как последнее средство, я потоков до смерти боюсь (мне проще и надёжнее эмулировать, когда нужны процессы, которые должны идти параллельно с разной производительностью).
Нельзя ли поставить хук или ещё что?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


WSAAsyncSelect, и выбирай с какого сокета при каком событии какому окну посылать сообщение. Потом ловишь это сообщение в оконной функции и делаешь то, что нужно.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Константу для номера сообщения надо придумать самому? А по какому принципу хотя бы, чтобы не пересечься ни с кем?
Аналогичный вопрос про номер порта для сокета - его тоже выбирают, взяв число от балды, надеясь, что больше никто не будет его использовать?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
А по какому принципу хотя бы, чтобы не пересечься ни с кем?
Обычно достаточно от WM_APP до $BFFF, то есть, чтобы не было системных сообщений с таким же номером... Ты ж ловить это сообщение будешь только у себя в оконной функции...

Цитата
Аналогичный вопрос про номер порта для сокета - его тоже выбирают, взяв число от балды, надеясь, что больше никто не будет его использовать?
Оставь номер порта при бинде нулевым - система сама найдет свободный порт, который никто не использует. Ну, или см., например, сюда: http://www.windowsfaq.narod.ru/articles/help/ports/part2.htm
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Оставь номер порта при бинде нулевым - система сама найдет свободный порт, который никто не использует

Надо ещё, чтобы номер совпал на клиентской и на серверной машине.

> Ну, или см., например, сюда:

О, спасибо. Число, что я взял от балды ($5446), попало в неиспользуемые. Правда, это таблица только для известных программ.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 7:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name