ちょっとした文脈のために、私は単純な CPU エミュレーターを書いています。エミュレータ プロセスは、プログラム内の次の操作を読み取って実行するための「ステップ」関数の呼び出しに要約されます。while
現在、これはループ内で可能な限り高速に行われています。
コードをクロスプラットフォームにしたいのですが、(残念ながら) Windows が主なターゲットです。
1,000Hz から 100,000Hz の範囲で定期的Emulator->step()
に関数を実行できる必要があります。
より遅いループの場合は単純に使用
sleep()
しますが、(少なくとも Windows では) そのような高い周波数の解像度がありません。また、Boost マイクロ秒タイマーをチェックするループを回転させることも試しました。このメソッドの不正確さを無視すると、「アイドル」であることを意図している間、実際の CPU 時間を使い果たします。複数のエミュレートされた CPU をスレッドで同時に実行しているため、
while
ループがパフォーマンスに顕著な影響を与えています。
C++でやりたいことをする方法は確かにありますか?