WPUQueueApc 函数 (ws2spi.h)

WPUQueueApc 函数将用户模式异步过程调用(APC)排队到指定的线程,以便于调用重叠的 I/O 完成例程。

Syntax

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

参数

[in] lpThreadId

指向标识线程上下文的 WSATHREADID 结构的指针。 指向此结构的指针由 Ws2_32.dll 作为指向重叠作的输入参数提供给服务提供商。 提供程序应在本地存储 WSATHREADID 结构,并提供指向此本地存储的指针。 WPUQueueApc 返回后,不再需要 WSATHREADID 的本地副本。

[in] lpfnUserApc

指向要调用的 APC 函数的指针。

[in] dwContext

随后作为 APC 函数的输入参数提供的 32 位上下文值。

[out] lpErrno

指向错误代码的指针。

返回值

如果未发生错误, WPUQueueApc 将返回零,并将指定线程的完成例程排入队列。 否则,它将返回SOCKET_ERROR,并且 lpErrno 中提供了特定的错误代码。

错误代码 Meaning
WSAEFAULT
dwThreadId 参数未指定有效的线程。
 
 

注解

此函数针对指定的线程对 APC 函数进行排队。 在 Windows 下,将使用用户模式异步过程调用(APC)来完成此作。 仅当指定的线程在可警报等待中被阻止并且将直接进行回调时,APC 才会执行。 此调用在中断上下文中是安全的。

LPWSAUSERAPC 的定义如下:

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

由于 APC 机制仅支持单个上下文值, 因此 lpfnUserApc 本身不能是客户端指定的完成例程,这涉及到更多参数。 服务提供商必须改为提供指向其自己的 APC 函数的指针,该函数使用提供的 dwContext 值访问重叠作所需的结果信息,然后调用客户端指定的完成例程。

对于用户模式组件实现重叠 I/O 的服务提供商,APC 机制的典型用法如下所示。

    - I/O作完成后,提供程序会分配一个小缓冲区,并使用指向客户端提供的完成过程和参数值的指针打包它,以传递给该过程。 - 它将 APC 排队,将指向缓冲区的指针指定为 dwContext 值,并将自己的中间过程指定为目标过程 lpfnUserApc。 - 当目标线程最终进入可警报的等待状态时,服务提供程序的中间过程在正确的线程上下文中调用。 - 中间过程只是解包参数,解除分配缓冲区,并调用客户端提供的完成过程。

要求

Requirement 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows操作系统
Header ws2spi.h

另请参阅

WSATHREADID

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo