структура 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 |