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


структура RIO_NOTIFICATION_COMPLETION (mswsock.h)

Структура RIO_NOTIFICATION_COMPLETION определяет метод завершения ввода-вывода, который будет использоваться с функцией RIONotify для отправки или получения сетевых данных с помощью зарегистрированных расширений ввода-вывода Winsock.

Синтаксис

typedef struct _RIO_NOTIFICATION_COMPLETION {
  RIO_NOTIFICATION_COMPLETION_TYPE Type;
  union {
    struct {
      HANDLE EventHandle;
      BOOL   NotifyReset;
    } Event;
    struct {
      HANDLE IocpHandle;
      PVOID  CompletionKey;
      PVOID  Overlapped;
    } Iocp;
  };
} RIO_NOTIFICATION_COMPLETION, *PRIO_NOTIFICATION_COMPLETION;

Члены

Type

Тип завершения, используемый с функцией RIONotify при отправке или получении данных.

Event

Event.EventHandle

Дескриптор события, устанавливаемого после завершенного запроса RIONotify .

Это значение допустимо, если для элемента Type задано значение RIO_EVENT_COMPLETION.

Event.NotifyReset

Логическое значение, которое приводит к сбросу связанного события при вызове функции RIONotify . Ненулевое значение приводит к сбросу связанного события.

Это значение допустимо, если для элемента Type задано значение RIO_EVENT_COMPLETION.

Iocp

Iocp.IocpHandle

Дескриптор для порта завершения ввода-вывода, используемого для завершения запроса RIONotify в очереди.

Это значение допустимо, если для элемента Type задано значение RIO_IOCP_COMPLETION.

Iocp.CompletionKey

Значение, используемое для параметра lpCompletionKey , возвращаемого функцией GetQueuedCompletionStatus или GetQueuedCompletionStatusEx при постановке в очередь запроса RIONotify .

Это значение допустимо, если для элемента Type задано значение RIO_IOCP_COMPLETION.

Iocp.Overlapped

Указатель на структуру OVERLAPPED , используемую при выполнении запроса RIONotify в очереди. Этот элемент должен указывать на допустимую структуру OVERLAPPED .

Это значение допустимо, если для элемента Type задано значение RIO_IOCP_COMPLETION.

Комментарии

Структура RIO_NOTIFICATION_COMPLETION используется для указания поведения функции RIONotify, используемой с зарегистрированными расширениями ввода-вывода Winsock.

Структура RIO_NOTIFICATION_COMPLETION передается в функцию RIOCreateCompletionQueue при создании RIO_CQ . Если приложение не вызывает функцию RIONotify для очереди завершения, очередь завершения можно создать без объекта RIO_NOTIFICATION_COMPLETION .

Для очередей завершения с использованием события элемент Typeструктуры RIO_NOTIFICATION_COMPLETION имеет значение RIO_EVENT_COMPLETION. Элемент Event.EventHandle структуры RIO_NOTIFICATION_COMPLETION должен содержать дескриптор события, созданного функцией WSACreateEvent или CreateEvent . Чтобы получить завершение RIONotify , приложение должно ожидать указанного дескриптора события с помощью WSAWaitForMultipleEvents или аналогичной подпрограммы ожидания. Если приложение планирует сбросить и повторно использовать событие, приложение может уменьшить затраты, задав для элемента Event.NotifyReset структуры RIO_NOTIFICATION_COMPLETION значение, отличное от нуля. Это приводит к сбросу события функцией RIONotify при появлении уведомления. Это устраняет необходимость вызова функции WSAResetEvent для сброса события между вызовами функции RIONotify .

Для очередей завершения, использующих порт завершения ввода-вывода, члену Typeструктуры RIO_NOTIFICATION_COMPLETION присваивается значение RIO_IOCP_COMPLETION. Элемент Iocp.IocpHandle структуры RIO_NOTIFICATION_COMPLETION должен содержать дескриптор для порта завершения ввода-вывода, созданного функцией CreateIoCompletionPort . Чтобы получить завершение RIONotify , приложение должно вызвать функцию GetQueuedCompletionStatus или GetQueuedCompletionStatusEx . Приложение должно предоставить выделенный объект OVERLAPPED для очереди завершения. Кроме того, оно может использовать элемент Iocp.CompletionKey , чтобы отличать запросы RIONotify в очереди завершения от других завершений ввода-вывода, включая завершения RIONotify для других очередей завершения.

Приложение, использующее пулы потоков, может использовать объекты ожидания пула потоков для получения завершений RIONotify через пул потоков. В этом случае вызов функции SetThreadpoolWait должен немедленно следовать за вызовом RIONotify. Если функция SetThreadpoolWait вызывается перед RIONotify и приложение использует RIONotify для очистки объекта события, это может привести к некорректному выполнению обратного вызова объекта ожидания.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [только классические приложения]
Минимальная версия сервера Windows Server 2012 [только классические приложения]
Верхняя часть mswsock.h

См. также раздел

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

ПЕРЕКРЫВАЮЩИХСЯ

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents