функция обратного вызова LPFN_RIORESIZECOMPLETIONQUEUE (mswsock.h)
Функция RIOResizeCompletionQueue изменяет размер очереди завершения ввода-вывода, чтобы она была больше или меньше для использования с зарегистрированными расширениями ввода-вывода Winsock.
Синтаксис
LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;
BOOL LpfnRioresizecompletionqueue(
RIO_CQ CQ,
DWORD QueueSize
)
{...}
Параметры
CQ
Дескриптор, который идентифицирует существующую очередь завершения ввода-вывода для изменения размера.
QueueSize
Возвращаемое значение
Если ошибка не возникает, функция RIOResizeCompletionQueue возвращает значение TRUE. В противном случае возвращается значение FALSE , а определенный код ошибки можно получить, вызвав функцию WSAGetLastError .
Код возврата | Описание |
---|---|
Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя в вызове. Эта ошибка возвращается, если очередь завершения, указанная в параметре CQ , содержит недопустимый указатель. |
|
В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр CQ недопустим (например, RIO_INVALID_CQ). Эта ошибка также возвращается, если размер очереди, указанной в параметре QueueSize , больше RIO_CQ_MAX_SIZE. |
|
Не удалось выделить достаточный объем памяти. Эта ошибка возвращается, если не удалось выделить память для очереди, указанной в параметре QueueSize . |
|
Существует слишком много операций, которые по-прежнему ссылаются на очередь завершения ввода-вывода. Размер очереди завершения ввода-вывода для меньшего размера в настоящее время невозможен. |
Функция RIOResizeCompletionQueue изменяет размер очереди завершения ввода-вывода, чтобы она была больше или меньше. Если очередь завершения ввода-вывода уже содержит завершения, эти завершения будут скопированы в новую очередь завершения.
Очереди завершения ввода-вывода имеют требуемый минимальный размер, зависящий от количества очередей запросов, связанных с очередью завершения, и количества отправки и получения в очередях запросов. Если приложение вызывает функцию RIOResizeCompletionQueue и пытается задать очередь слишком малой для количества существующих завершений в очереди завершения ввода-вывода, вызов завершится ошибкой и размер очереди не будет изменен.
Примечание
Указатель функции на функцию RIOResizeCompletionQueue должен быть получен во время выполнения путем вызова функции WSAIoctl с указанным SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER кодом операции. Входной буфер, передаваемый в функцию WSAIoctl , должен содержать WSAID_MULTIPLE_RIO, глобальный уникальный идентификатор (GUID), значение которого определяет зарегистрированные функции расширения ввода-вывода Winsock. При успешном выполнении выходные данные, возвращаемые функцией WSAIoctl , содержат указатель на структуру RIO_EXTENSION_FUNCTION_TABLE , содержащую указатели на зарегистрированные функции расширения ввода-вывода Winsock. SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL определяется в файле заголовка Ws2def.h. Guid WSAID_MULTIPLE_RIO определяется в файле заголовка Mswsock.h .
Windows Phone 8. Эта функция поддерживается для приложений Магазина Windows Phone Windows Phone 8 и более поздних версий.
Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.
Потокобезопасность
Если несколько потоков пытаются получить доступ к одному и тому же RIO_CQ с помощью функции RIODequeueCompletion или RIOResizeCompletionQueue , доступ должен координироваться критически важным разделом, блокировкой модуля чтения с тонким модулем чтения или аналогичным механизмом взаимного исключения. Если очереди завершения не являются общими, взаимное исключение не требуется.
Требования
Требование | Значение |
---|---|
Заголовок | mswsock.h |