Compartilhar via


estrutura RIO_NOTIFICATION_COMPLETION (mswsock.h)

A estrutura RIO_NOTIFICATION_COMPLETION especifica o método de conclusão de E/S a ser usado com uma função RIONotify para enviar ou receber dados de rede com as extensões de E/S registradas do Winsock.

Sintaxe

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;

Membros

Type

O tipo de conclusão a ser usado com a função RIONotify ao enviar ou receber dados.

Event

Event.EventHandle

O identificador do evento a ser definido após uma solicitação RIONotify concluída.

Esse valor é válido quando o membro Type é definido como RIO_EVENT_COMPLETION.

Event.NotifyReset

O valor booliano que faz com que o evento associado seja redefinido quando a função RIONotify é chamada. Um valor diferente de zero faz com que o evento associado seja redefinido.

Esse valor é válido quando o membro Type é definido como RIO_EVENT_COMPLETION.

Iocp

Iocp.IocpHandle

O identificador para a porta de conclusão de E/S a ser usada para enfileirar uma conclusão de solicitação RIONotify .

Esse valor é válido quando o membro Type é definido como RIO_IOCP_COMPLETION.

Iocp.CompletionKey

O valor a ser usado para o parâmetro lpCompletionKey retornado pela função GetQueuedCompletionStatus ou GetQueuedCompletionStatusEx ao enfileirar uma solicitação RIONotify .

Esse valor é válido quando o membro Type é definido como RIO_IOCP_COMPLETION.

Iocp.Overlapped

Um ponteiro para a estrutura OVERLAPPED a ser usada ao enfileirar uma conclusão de solicitação RIONotify . Esse membro deve apontar para uma estrutura OVERLAPPED válida.

Esse valor é válido quando o membro Type é definido como RIO_IOCP_COMPLETION.

Comentários

A estrutura RIO_NOTIFICATION_COMPLETION é usada para especificar o comportamento da função RIONotify usada com as extensões de E/S registradas do Winsock.

A estrutura RIO_NOTIFICATION_COMPLETION é passada para a função RIOCreateCompletionQueue quando um RIO_CQ é criado. Se um aplicativo não chamar a função RIONotify para uma fila de conclusão, a fila de conclusão poderá ser criada sem um objeto RIO_NOTIFICATION_COMPLETION .

Para filas de conclusão usando um evento, o membro Type da estrutura RIO_NOTIFICATION_COMPLETION é definido como RIO_EVENT_COMPLETION. O membro Event.EventHandle da estrutura RIO_NOTIFICATION_COMPLETION deve conter o identificador de um evento criado pela função WSACreateEvent ou CreateEvent . Para receber a conclusão do RIONotify , o aplicativo deve aguardar o identificador de evento especificado usando WSAWaitForMultipleEvents ou uma rotina de espera semelhante. Se o aplicativo planeja redefinir e reutilizar o evento, o aplicativo poderá reduzir a sobrecarga definindo o membro Event.NotifyReset da estrutura RIO_NOTIFICATION_COMPLETION como um valor diferente de zero. Isso faz com que o evento seja redefinido pela função RIONotify quando a notificação ocorre. Isso atenua a necessidade de chamar a função WSAResetEvent para redefinir o evento entre chamadas para a função RIONotify .

Para filas de conclusão usando uma porta de conclusão de E/S, o membro Type da estrutura RIO_NOTIFICATION_COMPLETION é definido como RIO_IOCP_COMPLETION. O membro Iocp.IocpHandle da estrutura RIO_NOTIFICATION_COMPLETION deve conter o identificador de uma porta de conclusão de E/S criada pela função CreateIoCompletionPort . Para receber a conclusão do RIONotify , o aplicativo deve chamar a função GetQueuedCompletionStatus ou GetQueuedCompletionStatusEx . O aplicativo deve fornecer um objeto OVERLAPPED dedicado para a fila de conclusão e também pode usar o membro Iocp.CompletionKey para distinguir as solicitações RIONotify na fila de conclusão de outras conclusões de E/S, incluindo CONCLUSÕES RIONotify para outras filas de conclusão.

Um aplicativo que usa pools de threads pode usar objetos de espera do pool de threads para obter conclusões RIONotify por meio de seu pool de threads. Nesse caso, a chamada para a função SetThreadpoolWait deve seguir imediatamente a chamada para RIONotify. Se a função SetThreadpoolWait for chamada antes de RIONotify e o aplicativo depender de RIONotify para limpar o objeto de evento, isso poderá resultar em execuções espúrias do retorno de chamada do objeto de espera.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 [somente aplicativos da área de trabalho]
Cabeçalho mswsock.h

Confira também

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

OVERLAPPED

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

Wsacreateevent

WSAResetEvent

WSAWaitForMultipleEvents