Compartir a través de


estructura RIO_NOTIFICATION_COMPLETION (mswsock.h)

La estructura de RIO_NOTIFICATION_COMPLETION especifica el método para que se use la finalización de E/S con una función RIONotify para enviar o recibir datos de red con las extensiones de E/S registradas de Winsock.

Sintaxis

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;

Miembros

Type

Tipo de finalización que se va a usar con la función RIONotify al enviar o recibir datos.

Event

Event.EventHandle

Identificador del evento que se va a establecer después de una solicitud RIONotify completada.

Este valor es válido cuando el miembro Type se establece en RIO_EVENT_COMPLETION.

Event.NotifyReset

Valor booleano que hace que se restablezca el evento asociado cuando se llama a la función RIONotify . Un valor distinto de cero hace que se restablezca el evento asociado.

Este valor es válido cuando el miembro Type se establece en RIO_EVENT_COMPLETION.

Iocp

Iocp.IocpHandle

Identificador del puerto de finalización de E/S que se va a usar para poner en cola una finalización de la solicitud RIONotify .

Este valor es válido cuando el miembro Type se establece en RIO_IOCP_COMPLETION.

Iocp.CompletionKey

Valor que se va a usar para el parámetro lpCompletionKey devuelto por la función GetQueuedCompletionStatus o GetQueuedCompletionStatusEx al poner en cola una solicitud RIONotify .

Este valor es válido cuando el miembro Type se establece en RIO_IOCP_COMPLETION.

Iocp.Overlapped

Puntero a la estructura SUPERPUESTA que se va a usar al poner en cola una finalización de la solicitud RIONotify . Este miembro debe apuntar a una estructura SUPERPUESTA válida.

Este valor es válido cuando el miembro Type se establece en RIO_IOCP_COMPLETION.

Comentarios

La estructura RIO_NOTIFICATION_COMPLETION se usa para especificar el comportamiento de la función RIONotify utilizada con las extensiones de E/S registradas de Winsock.

La estructura RIO_NOTIFICATION_COMPLETION se pasa a la función RIOCreateCompletionQueue cuando se crea un RIO_CQ . Si una aplicación no llama a la función RIONotify para una cola de finalización, la cola de finalización se puede crear sin un objeto RIO_NOTIFICATION_COMPLETION .

Para las colas de finalización mediante un evento, el miembro Type de la estructura RIO_NOTIFICATION_COMPLETION se establece en RIO_EVENT_COMPLETION. El miembro Event.EventHandle de la estructura de RIO_NOTIFICATION_COMPLETION debe contener el identificador de un evento creado por la función WSACreateEvent o CreateEvent . Para recibir la finalización de RIONotify , la aplicación debe esperar en el identificador de eventos especificado mediante WSAWaitForMultipleEvents o una rutina de espera similar. Si la aplicación planea restablecer y reutilizar el evento, la aplicación puede reducir la sobrecarga estableciendo el miembro Event.NotifyReset de la estructura de RIO_NOTIFICATION_COMPLETION en un valor distinto de cero. Esto hace que la función RIONotify restablezca el evento cuando se produce la notificación. Esto mitiga la necesidad de llamar a la función WSAResetEvent para restablecer el evento entre las llamadas a la función RIONotify .

Para las colas de finalización mediante un puerto de finalización de E/S, el miembro Type de la estructura de RIO_NOTIFICATION_COMPLETION se establece en RIO_IOCP_COMPLETION. El miembro Iocp.IocpHandle de la estructura de RIO_NOTIFICATION_COMPLETION debe contener el identificador de un puerto de finalización de E/S creado por la función CreateIoCompletionPort . Para recibir la finalización de RIONotify , la aplicación debe llamar a la función GetQueuedCompletionStatus o GetQueuedCompletionStatusEx . La aplicación debe proporcionar un objeto SUPERPUESTO dedicado para la cola de finalización y también puede usar el miembro Iocp.CompletionKey para distinguir las solicitudes RIONotify en la cola de finalización de otras finalizaciones de E/S, incluidas las finalizaciones RIONotify para otras colas de finalización.

Una aplicación que usa grupos de subprocesos puede usar objetos de espera del grupo de subprocesos para obtener finalizaciones RIONotify a través de su grupo de subprocesos. En ese caso, la llamada a la función SetThreadpoolWait debe seguir inmediatamente la llamada a RIONotify. Si se llama a la función SetThreadpoolWait antes de RIONotify y la aplicación se basa en RIONotify para borrar el objeto de evento, esto puede provocar ejecuciones falsas de la devolución de llamada del objeto de espera.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Encabezado mswsock.h

Consulte también

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

OVERLAPPED

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents