何を検索すればよいかさえわからないため、何かに問題があり、それについての答えが見つかりませんでした。アプリケーションから QueryPerformanceCounter を使用してタイマー クラスを作成しました。独自のインスタンス化されたタイマーを持つ 2 番目のスレッド オブジェクトを起動し、タイマーからデルタ時間を取得し、それを使用してループの反復回数を出力する無限ループを作成しました。 2番目。
奇妙な値を与えていることに気付いたので、デルタ時間を出力し始め、時々0になることがわかったので、デルタ時間を返すメソッドに入り、いくつかのテストを行いました。これは私の deltaTime() メソッドです:
double MyTimer2::deltaTime()
{
LARGE_INTEGER timenow;
QueryPerformanceCounter(&timenow);
//std::cout << "timenow=" << (double)timenow.QuadPart << " currentticks=" << (double)m_currentTicks.QuadPart << std::endl;
double m_deltaTime = (double)(timenow.QuadPart - m_currentTicks.QuadPart) /* 1000.0*/ / (double)m_frequency.QuadPart;
m_currentTicks = timenow;
if(m_deltaTime < 0.000001)
return 0.0;
return m_deltaTime;
}
そこで、「return 0.0;」にブレークポイントを設定しました。そして何が起こるかというと、ほとんどの場合そこに到達しますが、これは正しくありません。ただし、印刷コードのコメントを外して実行すると、ブレークポイントで停止することはありません。したがって、理論的には、私の印刷コードは正しく機能していますが、それを削除すると、正常に機能しなくなります! これはどのように可能であり、なぜ起こっているのでしょうか?どうすれば修正できますか? _ReadWriteBarrier() を試しましたが失敗しました。
前もって感謝します!
編集: 物理シミュレーション用の高解像度タイマーが必要です!