Windows Sockets: wyprowadzanie z klas gniazd
W tym artykule opisano niektóre funkcje, które można uzyskać, wyprowadzając własną klasę z jednej z klas gniazd.
Możesz utworzyć własne klasy gniazd z CAsyncSocket lub CSocket , aby dodać własną funkcjonalność. W szczególności te klasy zapewniają szereg wirtualnych funkcji składowych, które można zastąpić. Te funkcje obejmują OnReceive, OnSend, OnAccept, On Połączenie i OnClose. Funkcje w klasie pochodnego gniazda można zastąpić, aby móc korzystać z powiadomień, które udostępniają w przypadku wystąpienia zdarzeń sieciowych. Platforma wywołuje te funkcje wywołania zwrotnego powiadomień, aby powiadomić o ważnych zdarzeniach gniazd, takich jak odbieranie danych, które można rozpocząć odczytywanie. Aby uzyskać więcej informacji na temat funkcji powiadomień, zobacz Windows Sockets: Sockets: Sockets (Gniazda systemu Windows: powiadomienia gniazda).
Ponadto klasa CSocket
dostarcza funkcję składową OnMessagePending (zaawansowaną możliwość zastąpienia). MFC wywołuje tę funkcję, gdy gniazdo pompuje komunikaty oparte na systemie Windows. Możesz zastąpić OnMessagePending
wyszukiwanie określonych komunikatów z systemu Windows i odpowiadać na nie.
Domyślna wersja elementu podana OnMessagePending
w klasie CSocket
sprawdza kolejkę komunikatów dla komunikatów WM_PAINT podczas oczekiwania na zakończenie wywołania blokującego. Wysyła komunikaty malowania w celu poprawy jakości wyświetlania. Oprócz robienia czegoś przydatnego, ilustruje to jeden ze sposobów, w jaki można zastąpić funkcję samodzielnie. W innym przykładzie rozważ użycie OnMessagePending
dla następującego zadania. Załóżmy, że podczas oczekiwania na ukończenie transakcji sieciowej jest wyświetlane okno dialogowe bez moderowania. Okno dialogowe zawiera przycisk Anuluj, którego użytkownik może użyć do anulowania transakcji blokujących, które trwa zbyt długo. Przesłonięcia OnMessagePending
mogą pompować komunikaty związane z tym bez moderowym okno dialogowe.
W zastąpieniu OnMessagePending
zwróć wartość TRUE lub zwrot z wywołania do wersji klasy bazowej OnMessagePending
klasy . Wywołaj wersję klasy bazowej, jeśli wykonuje ona pracę, którą nadal chcesz wykonać.
Aby uzyskać więcej informacji, zobacz: