Сокеты Windows. Наследование от классов сокета
В этой статье описаны некоторые функциональные возможности, которые можно получить, используя собственный класс из одного из классов сокета.
Вы можете наследовать собственные классы сокетов из CAsyncSocket или CSocket, чтобы добавить собственные функциональные возможности. В частности, эти классы предоставляют ряд функций виртуальных членов, которые можно переопределить. К этим функциям относятся OnReceive, OnSend, OnAccept, On Подключение и OnClose. Вы можете переопределить функции в производном классе сокетов, чтобы воспользоваться уведомлениями, предоставляемыми при возникновении сетевых событий. Платформа вызывает эти функции обратного вызова уведомления, чтобы уведомить вас о важных событиях сокета, таких как получение данных, которые можно начать чтение. Дополнительные сведения о функциях уведомлений см. в разделе Сокеты Windows: Уведомления сокетов.
Кроме того, класс CSocket
предоставляет функцию-член OnMessagePending (расширенную переопределяемую). MFC вызывает эту функцию, пока сокет перекачивает сообщения на основе Windows. Вы можете переопределить OnMessagePending
поиск определенных сообщений из Windows и ответить на них.
Версия по умолчанию, OnMessagePending
предоставляемая в классе CSocket
, проверяет очередь сообщений для WM_PAINT сообщений, ожидая завершения блокирующего вызова. Он отправляет сообщения с краской для улучшения качества отображения. Помимо того, чтобы сделать что-то полезное, это иллюстрирует один из способов переопределения функции самостоятельно. В качестве другого примера рекомендуется использовать OnMessagePending
для следующей задачи. Предположим, что при ожидании завершения сетевой транзакции отображается диалоговое окно без режима. Диалоговое окно содержит кнопку "Отмена", которую пользователь может использовать для отмены блокирующих транзакций, которые занимают слишком много времени. Переопределение OnMessagePending
может перекачивать сообщения, связанные с этим бессерверным диалоговым окном.
OnMessagePending
В переопределении верните значение TRUE или возвращаемое из вызова в версию OnMessagePending
базового класса. Вызовите версию базового класса, если она выполняет работу, которую вы по-прежнему хотите выполнить.
Дополнительные сведения см. в разделе: