1

コントローラーの入力をキャプチャするスレッドがあります。このスレッドが行うことはこれだけですXInputGetState()。x ミリ秒ごとに呼び出し、結果を同期循環バッファに格納します。XInputSetState()特定の条件に達したときにコントローラーを振動させることで、この入力に反応する別のスレッドがあります。

つまり、一方のスレッドは のみを呼び出しXInputGetState()、もう一方のスレッドは のみを呼び出しますXInputSetState()。理論的には、いずれかの関数が同時に複数回呼び出されることはありません。同期せずにこれを行うのはまだ安全ではありませんか?

注: これらの 2 つの関数は、まったく異なるデータ セットで動作しますが、実装は同期されていないものに対して読み取り/書き込みを行う可能性が最も高いです。

4

2 に答える 2

2

この場合はい。XInput API は各外部エントリポイント呼び出しでクリティカル セクション ロックを取得するためです。

ところで、XInput を使用しているので、このブログ投稿をご覧ください。これら 2 つの API だけで、Windows Vista 以降の OS に組み込まれている XInput 9.1.0 を使用できます。そのヘッダーは Windows 8.x SDK にあり、従来の DirectSetup をいじる必要がありません。 XInput 1.3 をデプロイします。もちろん、Windows ストア アプリを使用している場合は、Windows 8.x OS の一部であり、ヘッダーは Windows 8.x SDK にある XInput 1.4 を使用するだけです。従来の DirectX SDK を使用する必要がある唯一の状況は、Windows 7 以前でオーディオ キャプチャ/再生をサポートする場合です。

于 2014-07-25T23:21:29.267 に答える