Isは原子炉スタイルの操作でIOCP(またはその他のAPI)を使用することは可能でしょうか?
質問
あなたがスタイルを原子炉与えます(ない選択のようなIOCPのような)任意のスケーラブルなWin32 APIがあります ソケットの操作?私の知る限りIOCPを使用すると、完了した操作の通知を受け取ることができます データの読み書き(proactor)しかしように私は、オペレーションの原子炉のスタイルを探しています:Iを ソケットが読めるか、書き込み可能である場合に通知を取得する必要があります(リアクター)。
のepoll、kqueueの、/dev/poll
に似た何か?
のWin32では、このようなAPIはありますか?もしそうならどこ、私はそれにマニュアルを見つけることができますか?
**明確化:**私はIOCPとしてスケーラブルなようである、または私は操作のような反応器内でIOCPを使用するための方法を探していたソケットのためのAPIのようなselect
必要が
をさらに明確化:のIOCPを使用すると、特定の操作の完了時に通知を受け取ることができます。たとえばます:
WSARecv(buffer,...); // start reading
WSAWaitForMultipleEvents(...); // wait when read is done
だから私のget noticationの の操作が行われた後 - オペレーションの試験監督のスタイルを
。は、私は必要なもののようなものです
WSARecv( NOTHING ); // start waiting for readability (not actual read)
WSAWaitForMultipleEvents(...); // wait until read would not block
// Now WSARecv would not block
WSARecv(buffer,...); // now actual non-blocking read
私はこれを行うことができますどのように?
解決 3
は不可能ます。
私は、原子炉のスタイルの操作を持っているとIOCPを使用しないBoost.Asioソースをチェックしました。すべての反応器形式の操作のためselect
有する別個のスレッドがIOCPの代わりに使用されます。
他のヒント
私は混乱している、スレッドブロックは複数のイベントソースで待機している原子炉のパターンではないでしょうか?つまり、)(これは、Windowsのサポートを選択だろう。コールごとに単一のコールバックがある場合Proactorパターンを使用すると、ReadFileEx / WriteFileExを経由して行うことができること、である。
あなたは例えばのReadFile(socket_fd、...)?
、ゼロnNumberOfBytesToReadを渡してみました多分それは「リードレディ」イベントを取得するのに役立ちます。