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


функция обратного вызова LPFN_RIORESIZECOMPLETIONQUEUE (mswsock.h)

Функция RIOResizeCompletionQueue изменяет размер очереди завершения ввода-вывода, чтобы она была больше или меньше для использования с зарегистрированными расширениями ввода-вывода Winsock.

Синтаксис

LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;

BOOL LpfnRioresizecompletionqueue(
  RIO_CQ CQ,
  DWORD QueueSize
)
{...}

Параметры

CQ

Дескриптор, который идентифицирует существующую очередь завершения ввода-вывода для изменения размера.

QueueSize

Возвращаемое значение

Если ошибка не возникает, функция RIOResizeCompletionQueue возвращает значение TRUE. В противном случае возвращается значение FALSE , а определенный код ошибки можно получить, вызвав функцию WSAGetLastError .

Код возврата Описание
WSAEFAULT
Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя в вызове. Эта ошибка возвращается, если очередь завершения, указанная в параметре CQ , содержит недопустимый указатель.
WSAEINVAL
В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр CQ недопустим (например, RIO_INVALID_CQ). Эта ошибка также возвращается, если размер очереди, указанной в параметре QueueSize , больше RIO_CQ_MAX_SIZE.
WSAENOBUFS
Не удалось выделить достаточный объем памяти. Эта ошибка возвращается, если не удалось выделить память для очереди, указанной в параметре QueueSize .
WSAETOOMANYREFS
Существует слишком много операций, которые по-прежнему ссылаются на очередь завершения ввода-вывода. Размер очереди завершения ввода-вывода для меньшего размера в настоящее время невозможен.

Функция 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