2

非ブロッキング ソケットを使用して多重化する IO Completion Ports を使用するプログラムを作成した場合、getQueuedCompletionStatus が返されたときに、ソケットで実行された関数が send または recv のどちらであったかをどのように知ることができますか?

前もって感謝します :)

4

2 に答える 2

3

その操作に使用された OVERLAPPED 構造体へのポインターを受け取っています。OVERLAPPED 構造を含む別の構造を作成するだけなので、完了ステータスで OVERLAPPED を取得すると、それを構造に変えることができます。

struct MyOverlapped
{
    OVERLAPPED SystemOverlapped;
    int MyStuff;
    void* MoreStuffForMe;
};

明らかに、受け取った OVERLAPPED* を MyOverlapped* にキャストするだけで、フィールドにアクセスできます。フィールドに何を入れるかはあなた次第です。

EDIT:C++継承も機能するはずなので、あなたもできる

 struct MyOverlapped : public OVERLAPPED
 {
     ...
 };
于 2012-08-19T08:24:56.643 に答える
-1

ああ、わからない。ReadFileEx、WriteFileEx 呼び出しの開始で渡されるバッファ構造体にブール値を入れます。そんな感じ...

于 2012-08-19T00:07:19.003 に答える