Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 |
|---|---|
| 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 |