UDP ソケットで IOCP を使用するアプリケーションを開発する必要がありますが、資料はマイクロソフトのドキュメントに他の例として示されているか、あいまいであるか、実装の形式に焦点を当てています。IOCP の使用経験のある方に、正しい使用法が次のとおりであることを確認していただきたいと思います。
- CreateIoCompletionPort 関数を呼び出して IOCP を作成します。
- 同じ関数でソケットを IOCP に関連付けます。
- IO 操作を実行します (私の場合は WSARecvFrom または WSASendTo)。
- IO操作が完了するまでプロセスをブロックするGetQueuedCompletionStatus関数を呼び出します(これは、たとえばスレッドプールで実行できます)
- バッファの読み込みや演算結果を実現します。
ソケットの実装は焦点ではないので説明していませんが、これは IOCP を操作する正しい方法ですか?
2 つ目の質問は、情報を送信する場合のアプリケーションの設計に関するものです。IOCP で動作するアプリケーションは、出力操作への直接呼び出し (WSASendTo 関数を直接呼び出すなど) を使用せず、PostQueuedCompletionStatus 関数を使用してスレッドでイベントを生成し、この操作を実行するという記述を読みました。私が調べたところによると、パフォーマンスの点で利点は見られません。
両方の形式がスレッド プールに適用されると仮定すると、PostQueuedCompletionStatus を使用して出力操作を実行する利点はありますか?