問題タブ [steamvr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 単一スレッドの作成時に SteamVR フレームがスパイクする
SteamVR/OpenVR を使用するネイティブ C++ アプリケーションがあります。一部のフレームでは、複数のスレッドを作成して作業を分散しています。これらのスレッドはすべて、続行する前に終了する必要があるため、すぐに join を呼び出します。
マルチスレッドの計算に 1 ミリ秒もかからないにもかかわらず、SteamVR で利用できるフレーム同期ウィンドウで示されるように、フレーム時間は依然として 16 ミリ秒をはるかに超えています (スケールは 16 で止まります)。
この問題は、OpenVR サンプル プロジェクトhellovr_openglで単一の空のスレッドを開始し、その後すぐに参加するだけで簡単に再現できます。私の場合、このコード スニペットを MainApplication の RenderFrame() 関数内に挿入しましたが、他の場所でも同様に機能します。
私自身のアプリケーションでは、フレームごとに高いフレーム時間が得られました。OpenVR サンプル プロジェクトで問題を再現すると、数フレームごとに発生するように見えますが、それでも非常に頻繁に発生します。
もちろん、フレームごとにスレッドを再利用する場合はスレッドをプールする必要があることは承知していますが、いずれにせよ、単一の (またはいくつかの) スレッドを作成 (および結合) するのにそれほど時間がかからないはずです。そして、時間測定が示すように、16ms にさえ近づきません。では、なぜ OpenVR がこれほど長い間停止するのでしょうか?