Platform SDK: DirectX

同期化

[C++]

アプリケーションで DirectPlay のメッセージを取得するために使用できる方法は 2 つある。1 つは、アプリケーションのメイン ループで受信キューをチェックする方法である。これは通常、アプリケーションがシングルスレッドであることを意味する。

もう 1 つは、アプリケーションで独立したスレッドを確保し、メッセージを待機してそれを処理する方法である。この場合、アプリケーションはプレーヤーを作成するときに、非 NULL の自動リセット同期イベント (Win32® の CreateEvent 関数を参照) へのハンドルを提供する必要がある。DirectPlay は、作成されたプレーヤーに対するメッセージが到着したときに、このイベントを設定する。

続いて、メッセージ処理スレッドは Win32 の WaitForSingleObject 関数を使用して、イベントが設定されるのを待機する。DPERR_NOMESSAGES が返され、メッセージ キューにメッセージが残っていないことが示されるまで、IDirectPlay4::Receive を呼び出し続ける。

アプリケーションで複数のローカル プレーヤーを作成する場合は、すべてのプレーヤーが同じイベントを共有するか、または各プレーヤーが独立したイベントを確保することができる。

[Visual Basic]

アプリケーションで DirectPlay のメッセージを取得するために使用できる方法は 2 つある。1 つは、アプリケーションのメイン ループで受信キューをチェックする方法である。Visual Basic では、以下のサンプル コードに示すように、Sub Main でメッセージをポーリングすることができる。

Public Sub Main()
 
    Do While DoEvents()  ' イベント処理を許可する。
        ReceiveMessages  ' 「メッセージの受信」を参照。
    Loop
End Sub

もう 1 つは、プレーヤーがメッセージを受信するたびに合図されるイベントを作成する方法である。この方法を利用するには、フォームまたはクラス モジュールに DirectXEvent クラスを実装し、DirectXEvent.DXCallBack メソッドを用意する必要がある。続いて、DirectX7.CreateEvent メソッドに DirectXEvent オブジェクト (通常は、DirectXEvent クラスを実装するフォーム) を渡してイベント ハンドルを取得し、そのハンドルを DirectPlay4.CreatePlayer メソッドの receiveEvent パラメータに渡す。すると、メッセージがそのプレーヤーの受信キューに入れられるたびに DXCallBack メソッドが自動的に呼び出される。アプリケーションは、このプロシージャ内でキューから任意の保留メッセージを取り出すことができる。

アプリケーションで複数のローカル プレーヤーを作成する場合は、すべてのプレーヤーが同じイベントを共有するか、または各プレーヤーが独立したイベントを確保することができる。