同時にアクティブになる 2 つのスレッドで QueryPerformanceCounter を繰り返し呼び出す (スピンする) ことを考えています。何も書かれていないので、これが本当に問題なのかどうかはわかりませんが、QueryPerformanceCounter はスレッドセーフですか?
ありがとう
同時にアクティブになる 2 つのスレッドで QueryPerformanceCounter を繰り返し呼び出す (スピンする) ことを考えています。何も書かれていないので、これが本当に問題なのかどうかはわかりませんが、QueryPerformanceCounter はスレッドセーフですか?
ありがとう
QueryPerformanceCounter への引数がどこにあるかによって異なります。これが 2 つのスレッド間の共有変数である場合、関数がスレッドセーフであるとは思えません。
LARGE_INTEGER
代わりに、各スレッドがQPC への呼び出しに渡す独自のものを用意することをお勧めします。各呼び出しは互いに独立しており、それぞれLARGE_INTEGER
の を適切に更新する必要があります。
この関数に関するMSDN の記事では、マルチプロセッサ環境の場合にアフィニティ マスクを設定することも示唆しています。
同時にアクティブになる 2 つのスレッドで QueryPerformanceCounter を繰り返し呼び出す (スピンする) ことを考えています。
うーん。何をしているのかと、利用可能なプロセッサの数を考えてみてください。プロセッサが 1 つしかない場合、これは機能しません。QueryPerformanceCounter はあるスレッドから別のスレッドに制御を渡さないため、「同時にアクティブにする」ことはできません。シングル プロセッサを使用した win32 でのスレッド スイッチングには、1 ミリ秒程度のタイミング粒度があると確信しています。
複数のプロセッサを使用している場合、問題のある結果が得られる可能性があります (理論的には、マルチプロセッサ PC を持っていないため、自分でこれを観察したことはありません)。QPC に関するさらに興味深い議論は、インターネットで見つけることができます (たとえば、Raymond Chen のブログを参照してください)。
タイミングの最適化を本当に待ちたい場合は、そのようなことの専門家がいるゲーム プログラミング フォーラムの 1 つで、これを行う最善の方法を尋ねることをお勧めします。