プログラムが開始されてからの経過時間 (壁時計時間) を取得する方法が必要です。これは、ユーザーがシステム クロックに干渉しても回復できる方法です。
Windows では、非標準の clock() 実装ではうまくいきません。起動時にサンプリングされた時間との差を計算するだけで機能するように見えるため、「時計の針を戻す」と負の値が得られます。 .
UNIX では、clock/getrusage はシステム時刻を参照しますが、gettimeofday などの関数を使用してタイムスタンプをサンプリングすると、Windows で clock を使用するのと同じ問題があります。
私は精度にはあまり興味がありません.0.5秒の解像度タイマーをバックグラウンドで回転させて、クロックスキューが発生したときにクロックスキューに対抗することで解決策をハックしました(サンプル時間と予想時間の差が1秒を超える場合)新しいベースラインに予想されるタイマーを使用します)が、もっと良い方法があるに違いないと思います。