Compartilhar via


Função WPUQueueApc (ws2spi.h)

A função WPUQueueApc enfileira um APC (chamada de procedimento assíncrono) no modo de usuário para o thread especificado, a fim de facilitar a invocação de rotinas de conclusão de E/S sobrepostas.

Sintaxe

int WPUQueueApc(
  [in]  LPWSATHREADID lpThreadId,
  [in]  LPWSAUSERAPC  lpfnUserApc,
  [in]  DWORD_PTR     dwContext,
  [out] LPINT         lpErrno
);

Parâmetros

[in] lpThreadId

Ponteiro para uma estrutura WSATHREADID que identifica o contexto do thread. Um ponteiro para essa estrutura é fornecido ao provedor de serviços pelo Ws2_32.dll como um parâmetro de entrada para uma operação sobreposta. O provedor deve armazenar a estrutura WSATHREADID localmente e fornecer um ponteiro para esse repositório local. A cópia local do WSATHREADID não é mais necessária quando WPUQueueApc retorna.

[in] lpfnUserApc

Ponteiro para a função APC a ser chamada.

[in] dwContext

Valor de contexto de 32 bits que é fornecido posteriormente como um parâmetro de entrada para a função APC.

[out] lpErrno

Ponteiro para o código de erro.

Valor de retorno

Se nenhum erro ocorrer, WPUQueueApc retornará zero e enfileira a rotina de conclusão do thread especificado. Caso contrário, ele retorna SOCKET_ERROR e um código de erro específico está disponível no lpErrno.

Código do erro Meaning
WSAEFAULT
O parâmetro dwThreadId não especifica um thread válido.
 
 

Observações

Essa função enfileira uma função APC no thread especificado. No Windows, isso será feito usando uma APC (chamada de procedimento assíncrono) no modo de usuário. O APC só será executado quando o thread especificado for bloqueado em uma espera alertável e um retorno de chamada será feito diretamente. Essa chamada é segura para uso em um contexto de interrupção.

LPWSAUSERAPC é definido da seguinte maneira:

typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );

Como o mecanismo APC dá suporte apenas a um único valor de contexto, lpfnUserApc em si não pode ser a rotina de conclusão especificada pelo cliente, o que envolve mais parâmetros. Em vez disso, o provedor de serviços deve fornecer um ponteiro para sua própria função APC que usa o valor dwContext fornecido para acessar as informações de resultado necessárias para a operação sobreposta e, em seguida, invoca a rotina de conclusão especificada pelo cliente.

Para provedores de serviços em que um componente de modo de usuário implementa E/S sobreposta, um uso típico do mecanismo de APC é o seguinte.

    - Quando a operação de E/S é concluída, o provedor aloca um pequeno buffer e o empacota com um ponteiro para o procedimento de conclusão fornecido pelo cliente e valores de parâmetro para passar para o procedimento. - Ele enfileira um APC, especificando o ponteiro para o buffer como o valor dwContext e seu próprio procedimento intermediário como o procedimento de destino lpfnUserApc. - Quando o thread de destino eventualmente entra no estado de espera alertável, o procedimento intermediário do provedor de serviços é chamado no contexto de thread adequado. - O procedimento intermediário simplesmente descompacta parâmetros, desaloca o buffer e chama o procedimento de conclusão fornecido pelo cliente.

Requirements

Requirement Value
Cliente mínimo suportado Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo compatível Windows 2000 Server [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
Header ws2spi.h

Consulte também

WSATHREADID

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo