RIO_NOTIFICATION_COMPLETION 構造体 (mswsock.h)
RIO_NOTIFICATION_COMPLETION構造体は、Winsock に登録された I/O 拡張機能を使用してネットワーク データを送受信するために RIONotify 関数と共に使用する I/O 完了の方法を指定します。
構文
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 関数が呼び出されたときに関連付けられたイベントをリセットするブール値。 0 以外の値を指定すると、関連付けられたイベントがリセットされます。
この値は、 Type メンバーが RIO_EVENT_COMPLETION に設定されている場合に有効です。
Iocp
Iocp.IocpHandle
RIONotify 要求完了のキューに使用する I/O 入力候補ポートのハンドル。
この値は、 Type メンバーが RIO_IOCP_COMPLETION に設定されている場合に有効です。
Iocp.CompletionKey
RIONotify 要求をキューに入れるときに GetQueuedCompletionStatus または GetQueuedCompletionStatusEx 関数によって返される lpCompletionKey パラメーターに使用する値。
この値は、 Type メンバーが RIO_IOCP_COMPLETION に設定されている場合に有効です。
Iocp.Overlapped
RIONotify 要求の完了をキューに入れたときに使用する OVERLAPPED 構造体へのポインター。 このメンバーは、有効な OVERLAPPED 構造体を指している必要があります。
この値は、 Type メンバーが RIO_IOCP_COMPLETION に設定されている場合に有効です。
注釈
RIO_NOTIFICATION_COMPLETION構造体は、Winsock 登録済み I/O 拡張機能で使用される RIONotify 関数の動作を指定するために使用されます。
RIO_NOTIFICATION_COMPLETION構造体は、RIO_CQの作成時に RIOCreateCompletionQueue 関数に渡されます。 アプリケーションが完了キューに対して RIONotify 関数を呼び出さない場合は、 RIO_NOTIFICATION_COMPLETION オブジェクトなしで完了キューを作成できます。
イベントを使用する完了キューの場合、RIO_NOTIFICATION_COMPLETION構造体の Type メンバーは RIO_EVENT_COMPLETION に設定されます。 RIO_NOTIFICATION_COMPLETION 構造体の Event.EventHandle メンバーには、WSACreateEvent または CreateEvent 関数によって作成されたイベントのハンドルが含まれている必要があります。 RIONotify の完了を受け取る場合、アプリケーションは WSAWaitForMultipleEvents または同様の待機ルーチンを使用して、指定されたイベント ハンドルを待機する必要があります。 アプリケーションがイベントのリセットと再利用を計画している場合、RIO_NOTIFICATION_COMPLETION構造体のEvent.NotifyReset メンバーを 0 以外の値に設定することで、アプリケーションのオーバーヘッドを削減できます。 これにより、通知が発生したときに RIONotify 関数によってイベントがリセットされます。 これにより、RIONotify 関数の呼び出し間でイベントをリセットするために WSAResetEvent 関数を呼び出す必要が軽減されます。
I/O 入力候補ポートを使用する完了キューの場合、RIO_NOTIFICATION_COMPLETION構造体の Type メンバーは RIO_IOCP_COMPLETION に設定されます。 RIO_NOTIFICATION_COMPLETION 構造体の Iocp.IocpHandle メンバーには、CreateIoCompletionPort 関数によって作成された I/O 完了ポートのハンドルが含まれている必要があります。 RIONotify 完了を受け取るには、アプリケーションで GetQueuedCompletionStatus または GetQueuedCompletionStatusEx 関数を呼び出す必要があります。 アプリケーションは、完了キューに専用の OVERLAPPED オブジェクトを提供する必要があります。また、 Iocp.CompletionKey メンバーを使用して、完了キュー上の RIONotify 要求と、他の完了キューの RIONotify 補完を含む他の I/O 完了を区別することもできます。
スレッド プールを使用するアプリケーションでは、スレッド プール待機オブジェクトを使用して、そのスレッド プールを介して RIONotify 完了を取得できます。 その場合、 SetThreadpoolWait 関数の呼び出しは 、RIONotify の呼び出しの直後に行う必要があります。 RIONotify の前に SetThreadpoolWait 関数が呼び出され、アプリケーションが RIONotify を使用してイベント オブジェクトをクリアすると、待機オブジェクト コールバックが誤って実行される可能性があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
Header | mswsock.h |