RIO_NOTIFICATION_COMPLETION-Struktur (mswsock.h)

Die RIO_NOTIFICATION_COMPLETION-Struktur gibt die Methode für die E/A-Vervollständigung an, die mit einer RIONotify-Funktion zum Senden oder Empfangen von Netzwerkdaten mit den registrierten Winsock-E/A-Erweiterungen verwendet werden soll.

Syntax

typedef struct _RIO_NOTIFICATION_COMPLETION {
  RIO_NOTIFICATION_COMPLETION_TYPE Type;
  union {
    struct {
      HANDLE EventHandle;
      BOOL   NotifyReset;
    } Event;
    struct {
      HANDLE IocpHandle;
      PVOID  CompletionKey;
      PVOID  Overlapped;
    } Iocp;
  };
} RIO_NOTIFICATION_COMPLETION, *PRIO_NOTIFICATION_COMPLETION;

Member

Type

Der Vervollständigungstyp, der mit der RIONotify-Funktion beim Senden oder Empfangen von Daten verwendet werden soll.

Event

Event.EventHandle

Das Handle für das Ereignis, das nach einer abgeschlossenen RIONotify-Anforderung festgelegt werden soll.

Dieser Wert ist gültig, wenn das Element Typ auf RIO_EVENT_COMPLETION festgelegt ist.

Event.NotifyReset

Der boolesche Wert, der dazu führt, dass das zugeordnete Ereignis zurückgesetzt wird, wenn die RIONotify-Funktion aufgerufen wird. Ein Wert ungleich 0 bewirkt, dass das zugeordnete Ereignis zurückgesetzt wird.

Dieser Wert ist gültig, wenn das Element Typ auf RIO_EVENT_COMPLETION festgelegt ist.

Iocp

Iocp.IocpHandle

Das Handle für den E/A-Vervollständigungsport, der zum Anstehen einer RIONotify-Anforderung verwendet werden soll.

Dieser Wert ist gültig, wenn das Element Typ auf RIO_IOCP_COMPLETION festgelegt ist.

Iocp.CompletionKey

Der Wert, der für den lpCompletionKey-Parameter verwendet werden soll, der von der GetQueuedCompletionStatus- oder GetQueuedCompletionStatusEx-Funktion beim Anstehen einer RIONotify-Anforderung zurückgegeben wird.

Dieser Wert ist gültig, wenn das Element Typ auf RIO_IOCP_COMPLETION festgelegt ist.

Iocp.Overlapped

Ein Zeiger auf die OVERLAPPED-Struktur , die beim Anstehen einer RIONotify-Anforderung verwendet werden soll. Dieses Element muss auf eine gültige OVERLAPPED-Struktur verweisen.

Dieser Wert ist gültig, wenn das Element Typ auf RIO_IOCP_COMPLETION festgelegt ist.

Hinweise

Die RIO_NOTIFICATION_COMPLETION-Struktur wird verwendet, um das Verhalten der RIONotify-Funktion anzugeben, die mit den registrierten Winsock-E/A-Erweiterungen verwendet wird.

Die RIO_NOTIFICATION_COMPLETION-Struktur wird an die RIOCreateCompletionQueue-Funktion übergeben, wenn ein RIO_CQ erstellt wird. Wenn eine Anwendung die RIONotify-Funktion für eine Vervollständigungswarteschlange nicht aufruft, kann die Vervollständigungswarteschlange ohne RIO_NOTIFICATION_COMPLETION-Objekt erstellt werden.

Für Vervollständigungswarteschlangen, die ein Ereignis verwenden, ist das Type-Element der RIO_NOTIFICATION_COMPLETION-Struktur auf RIO_EVENT_COMPLETION festgelegt. Das Event.EventHandle-Element der RIO_NOTIFICATION_COMPLETION-Struktur sollte das Handle für ein Ereignis enthalten, das von der WSACreateEvent - oder CreateEvent-Funktion erstellt wurde. Um die RIONotify-Vervollständigung zu erhalten, sollte die Anwendung mit WSAWaitForMultipleEvents oder einer ähnlichen Warteroutine auf das angegebene Ereignishandle warten. Wenn die Anwendung plant, das Ereignis zurückzusetzen und wiederzuverwenden, kann die Anwendung den Mehraufwand reduzieren, indem das Event.NotifyReset-Element der RIO_NOTIFICATION_COMPLETION-Struktur auf einen Wert ungleich 0 festgelegt wird. Dies führt dazu, dass das Ereignis von der RIONotify-Funktion zurückgesetzt wird, wenn eine Benachrichtigung erfolgt. Dies verringert die Notwendigkeit, die WSAResetEvent-Funktion aufzurufen, um das Ereignis zwischen Aufrufen der RIONotify-Funktion zurückzusetzen.

Für Vervollständigungswarteschlangen, die einen E/A-Vervollständigungsport verwenden, ist das Element Typ der RIO_NOTIFICATION_COMPLETION-Struktur auf RIO_IOCP_COMPLETION festgelegt. Das Iocp.IocpHandle-Element der RIO_NOTIFICATION_COMPLETION-Struktur sollte das Handle für einen E/A-Vervollständigungsport enthalten, der von der CreateIoCompletionPort-Funktion erstellt wird. Um die RIONotify-Vervollständigung zu erhalten, sollte die Anwendung die Funktion GetQueuedCompletionStatus oderGetQueuedCompletionStatusEx aufrufen. Die Anwendung sollte ein dediziertes OVERLAPPED-Objekt für die Vervollständigungswarteschlange bereitstellen, und sie kann auch das Iocp.CompletionKey-Element verwenden, um RIONotify-Anforderungen für die Abschlusswarteschlange von anderen E/A-Vervollständigungen zu unterscheiden, einschließlich RIONotify-Vervollständigungen für andere Vervollständigungswarteschlangen.

Eine Anwendung, die Threadpools verwendet, kann Threadpoolwarteobjekte verwenden, um RIONotify-Vervollständigungen über ihren Threadpool abzurufen. In diesem Fall sollte der Aufruf der SetThreadpoolWait-Funktion sofort dem Aufruf von RIONotify folgen. Wenn die SetThreadpoolWait-Funktion vor RIONotify aufgerufen wird und die Anwendung auf RIONotify angewiesen ist, um das Ereignisobjekt zu löschen, kann dies zu falschen Ausführungen des Warteobjektrückrufs führen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Kopfzeile mswsock.h

Weitere Informationen

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

OVERLAPPED

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents