Поделиться через


Функция WPUQueueApc (ws2spi.h)

Функция WPUQueueApc помещает вызов асинхронной процедуры пользовательского режима (APC) в указанный поток, чтобы упростить вызов перекрывающихся подпрограмм завершения ввода-вывода.

Синтаксис

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

Параметры

[in] lpThreadId

Указатель на структуру WSATHREADID , которая определяет контекст потока. Указатель на эту структуру предоставляется поставщику услуг Ws2_32.dll в качестве входного параметра для перекрывающейся операции. Поставщик должен хранить структуру WSATHREADID локально и предоставлять указатель на это локальное хранилище. Локальная копия WSATHREADID больше не требуется после возврата WPUQueueApc .

[in] lpfnUserApc

Указатель на вызываемую функцию APC.

[in] dwContext

32-разрядное значение контекста, которое впоследствии предоставляется в качестве входного параметра функции APC.

[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 для доступа к необходимым сведениям о результатах для перекрывающейся операции, а затем вызывает процедуру завершения, указанную клиентом.

Для поставщиков услуг, где компонент пользовательского режима реализует перекрываемые ввода-вывода, обычное использование механизма APC выглядит следующим образом.

    — После завершения операции ввода-вывода поставщик выделяет небольшой буфер и упаковывает его с указателем на предоставленные клиентом процедуры завершения и значения параметров для передачи процедуре. — Он помещает APC в очередь, указывая указатель на буфер в качестве значения dwContext и собственной промежуточной процедуры в качестве целевой процедуры lpfnUserApc. — Когда целевой поток в конечном итоге вводит оповещенное состояние ожидания, промежуточная процедура поставщика услуг вызывается в соответствующем контексте потока. — Промежуточная процедура просто распаковывает параметры, освобождает буфер и вызывает процедуру завершения, предоставляемую клиентом.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Windows
Header ws2spi.h

См. также

WSATHREADID

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo