Compartilhar via


LPFN_RIODEQUEUECOMPLETION função de retorno de chamada (mswsock.h)

A função RIODequeueCompletion remove entradas de uma fila de conclusão de E/S para uso com as extensões de E/S registradas do Winsock.

Sintaxe

LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;

ULONG LpfnRiodequeuecompletion(
  RIO_CQ CQ,
  PRIORESULT Array,
  ULONG ArraySize
)
{...}

Parâmetros

CQ

Um descritor que identifica uma fila de conclusão de E/S.

Array

Uma matriz de estruturas RIORESULT para receber a descrição das conclusões removidas da fila.

ArraySize

O número máximo de entradas na Matriz a ser gravada.

Retornar valor

Se nenhum erro ocorrer, a função RIODequeueCompletion retornará o número de entradas de conclusão removidas da fila de conclusão especificada. Caso contrário, um valor de RIO_CORRUPT_CQ será retornado para indicar que o estado do RIO_CQ passado no parâmetro CQ tornou-se corrompido devido à corrupção de memória ou ao uso indevido das funções RIO.

Comentários

A função RIODequeueCompletion remove entradas de uma fila de conclusão de E/S para solicitações de envio e recebimento com as extensões de E/S registradas do Winsock.

A função RIODequeueCompletion é o mecanismo pelo qual um aplicativo pode descobrir sobre solicitações de envio e recebimento concluídas. Um aplicativo normalmente chama a função RIODequeueCompletion depois de receber notificação com base no método registrado com a função RIONotify quando a fila de conclusão não está vazia. O comportamento de notificação para uma fila de conclusão de E/S é definido quando o RIO_CQ é criado. A estrutura RIO_NOTIFICATION_COMPLETION que determina o comportamento da notificação é passada para a função RIOCreateCompletionQueue quando um RIO_CQ é criado.

Quando a função RIODequeueCompletion é concluída, o parâmetro Array contém uma matriz de ponteiros para estruturas RIORESULT para as solicitações de envio e recebimento concluídas que foram removidas da fila. Os membros das estruturas RIORESULT retornadas fornecem informações sobre a conclusão status da solicitação concluída e o número de bytes transferidos. Cada estrutura RIORESULT retornada também inclui um contexto de soquete e um contexto de aplicativo que pode ser usado para identificar a solicitação concluída específica.

Se a fila de conclusão de E/S passada no parâmetro CQ não for válida ou danificada, a função RIODequeueCompletion retornará uma contagem de RIO_CORRUPT_CQ.

A função RIODequeueCompletion retornará um valor igual a zero se não houver solicitações de envio ou recebimento concluídas a serem removidas da fila.

Somente após a conclusão de uma solicitação ter sido desativada o sistema libera a associação para seu registro de buffer e buffer, juntamente com seu preço de cota.

Observação

Para fins de eficiência, o acesso às filas de conclusão (structs RIO_CQ ) e às filas de solicitação (RIO_RQ structs) não são protegidos por primitivos de sincronização. Se você precisar acessar uma fila de conclusão ou solicitação de vários threads, o acesso deverá ser coordenado por uma seção crítica, um bloqueio de gravação de leitor fino ou um mecanismo semelhante. Esse bloqueio não é necessário para acesso por um único thread. Threads diferentes podem acessar filas de solicitações/conclusão separadas sem bloqueios. A necessidade de sincronização ocorre somente quando vários threads tentam acessar a mesma fila. A sincronização também será necessária se vários threads emitirem e receberem no mesmo soquete porque as operações de envio e recebimento usarão a fila de solicitações do soquete.

 

Observação

O ponteiro de função para a função RIODequeueCompletion deve ser obtido em tempo de execução fazendo uma chamada para a função WSAIoctl com o SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode especificado. O buffer de entrada passado para a função WSAIoctl deve conter WSAID_MULTIPLE_RIO, um GUID (identificador global exclusivo) cujo valor identifica as funções de extensão de E/S registradas do Winsock. Em caso de êxito, a saída retornada pela função WSAIoctl contém um ponteiro para a estrutura RIO_EXTENSION_FUNCTION_TABLE que contém ponteiros para as funções de extensão de E/S registradas do Winsock. O SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL é definido no arquivo de cabeçalho Ws2def.h . O GUID WSAID_MULTIPLE_RIO é definido no arquivo de cabeçalho Mswsock.h .

 

Windows Phone 8: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.

Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.

Acesso thread-safe

Se vários threads tentarem acessar o mesmo RIO_CQ usando a função RIODequeueCompletion , o acesso deverá ser coordenado por uma seção crítica, bloqueio de gravador de leitor fino ou mecanismo de exclusão mútua semelhante. Se as filas de conclusão não forem compartilhadas, a exclusão mútua não será necessária.

Requisitos

Requisito Valor
Cabeçalho mswsock.h