22

ハードウェア タイマーを使用すると、ソフトウェアの遅延よりも正確な結果が得られることがわかりました。アセンブリに 1 ミリ秒のソフトウェア遅延を記述しました。この遅延を使用してミリ秒ごとに繰り返すプロセスを開始し、カウンターを使用して 100 ミリ秒ごとに別の処理を実行できます。この手法は、ハードウェア タイマーを使用する場合よりも精度が低くなります。これから使用するハードウェアに組み込まれました。

では、Java に組み込まれているタイミングはどれくらい正確なのだろうか? ハードウェア タイマーを使用している場合System.currentTimeMillisThread.sleep使用しない場合がありますが、これらの組み込み Java メソッドはハードウェア タイマーと比較してどのくらい正確ですか?

4

3 に答える 3

15

Thread.sleep()不正確です。どの程度不正確かは、基盤となるオペレーティング システムとそのタイマーおよびスケジューラによって異なります。ガベージ コレクションを並行して実行すると、過度のスリープが発生する可能性があることを経験しました。

「リアルタイム」シミュレーションを行う場合、 の不正確さについてメイン ループを修正する必要がありますsleep。これは、ウェイクアップの予想時間を計算し、それを実際のウェイクアップ時間と比較し、次のループで差を補正することで実行できます。

より優れたパフォーマンスが必要な場合は、 Java Real-Time System 仕様を参照してください。私は自分でそれを使用していないので、詳細を提供することはできません。

于 2013-09-11T09:13:56.857 に答える
2

Java 言語仕様から。

Thread.sleep は、現在実行中のスレッドを、システム タイマーとスケジューラの精度と精度に従って、指定された期間スリープ (一時的に実行を停止) させます。スレッドはどのモニターの所有権も失うことはなく、実行の再開はスケジューリングと、スレッドを実行するプロセッサーの可用性に依存します。

于 2013-09-11T09:06:54.753 に答える