Condividi tramite


RIO_NOTIFICATION_COMPLETION struttura (mswsock.h)

La struttura RIO_NOTIFICATION_COMPLETION specifica il metodo per il completamento di I/O da usare con una funzione RIONotify per l'invio o la ricezione di dati di rete con le estensioni di I/O registrate Winsock.

Sintassi

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;

Members

Type

Tipo di completamento da usare con la funzione RIONotify durante l'invio o la ricezione di dati.

Event

Event.EventHandle

Handle per l'evento da impostare seguendo una richiesta RIONotify completata.

Questo valore è valido quando il membro Type è impostato su RIO_EVENT_COMPLETION.

Event.NotifyReset

Valore booleano che causa la reimpostazione dell'evento associato quando viene chiamata la funzione RIONotify . Un valore diverso da zero causa la reimpostazione dell'evento associato.

Questo valore è valido quando il membro Type è impostato su RIO_EVENT_COMPLETION.

Iocp

Iocp.IocpHandle

Handle per la porta di completamento di I/O da usare per accodare un completamento della richiesta RIONotify .

Questo valore è valido quando il membro Type è impostato su RIO_IOCP_COMPLETION.

Iocp.CompletionKey

Valore da usare per il parametro lpCompletionKey restituito dalla funzione GetQueuedCompletionStatus o GetQueuedCompletionStatusEx durante l'accodamento di una richiesta RIONotify.

Questo valore è valido quando il membro Type è impostato su RIO_IOCP_COMPLETION.

Iocp.Overlapped

Puntatore alla struttura OVERLAPPED da usare durante l'accodamento di un completamento della richiesta RIONotify . Questo membro deve puntare a una struttura OVERLAPPED valida.

Questo valore è valido quando il membro Type è impostato su RIO_IOCP_COMPLETION.

Commenti

La struttura RIO_NOTIFICATION_COMPLETION viene usata per specificare il comportamento della funzione RIONotify usata con le estensioni di I/O registrate winsock.

La struttura RIO_NOTIFICATION_COMPLETION viene passata alla funzione RIOCreateCompletionQueue quando viene creata una RIO_CQ . Se un'applicazione non chiama la funzione RIONotify per una coda di completamento, la coda di completamento può essere creata senza un oggetto RIO_NOTIFICATION_COMPLETION .

Per le code di completamento usando un evento, il membro Type della struttura RIO_NOTIFICATION_COMPLETION è impostato su RIO_EVENT_COMPLETION. Il membro EventHandle della struttura RIO_NOTIFICATION_COMPLETION deve contenere l'handle per un evento creato dalla funzione WSACreateEvent o CreateEvent . Per ricevere il completamento di RIONotify , l'applicazione deve attendere l'handle di eventi specificato usando WSAWaitForMultipleEvents o una routine di attesa simile. Se l'applicazione prevede di reimpostare e riutilizzare l'evento, l'applicazione può ridurre il sovraccarico impostando il membro Event.NotifyReset della struttura RIO_NOTIFICATION_COMPLETION su un valore diverso da zero. In questo modo l'evento viene reimpostato dalla funzione RIONotify quando si verifica la notifica. Ciò riduce la necessità di chiamare la funzione WSAResetEvent per reimpostare l'evento tra le chiamate alla funzione RIONotify .

Per le code di completamento usando una porta di completamento di I/O, il membro Type della struttura RIO_NOTIFICATION_COMPLETION è impostato su RIO_IOCP_COMPLETION. Il membro Iocp.IocpHandle della struttura RIO_NOTIFICATION_COMPLETION deve contenere l'handle per una porta di completamento di I/O creata dalla funzione CreateIoCompletionPort . Per ricevere il completamento RIONotify, l'applicazione deve chiamare la funzione GetQueuedCompletionStatus o GetQueuedCompletionStatusEx. L'applicazione deve fornire un oggetto OVERLAPPED dedicato per la coda di completamento e può anche usare il membro Iocp.CompletionKey per distinguere le richieste RIONotify nella coda di completamento da altri completamento di I/O, inclusi i completamento RIONotify per altre code di completamento.

Un'applicazione che usa pool di thread può usare oggetti di attesa del pool di thread per ottenere i completamento RIONotify tramite il pool di thread. In tal caso, la chiamata alla funzione SetThreadpoolWait deve immediatamente seguire la chiamata a RIONotify. Se la funzione SetThreadpoolWait viene chiamata prima di RIONotify e l'applicazione si basa su RIONotify per cancellare l'oggetto evento, ciò può causare esecuzioni spurie del callback dell'oggetto wait.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Intestazione mswsock.h

Vedi anche

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

SOVRAPPOSTA

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents