Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция 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 |
|---|---|
| Параметр 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 |