私はしばらくの間 C# を使用して小さなゲームを作成してきましたが、別の PC でそのゲームをテストしているときに、奇妙な経過時間の問題に遭遇しました。
ほとんどの場合、最後のゲーム ループから経過した時間に基づいて更新されるように、このゲームですべてを設定しましたが、2 台目の PC ではすべてがうまくいきませんでした。
メソッドを使用して TimeSpan を作成することに問題があることがわかりましたFromTicks()
。次のコードを使用して少しテストを行いました。
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
sw.Stop();
TimeSpan t = TimeSpan.FromTicks(sw.ElapsedTicks);
Console.WriteLine(t.ToString());
Console.WriteLine(sw.Elapsed.ToString());
Console.ReadKey();
}
}
メイン PC でこのプログラムを実行したところ、次の結果が得られました。
00:00:00.3528353 00:00:00.9856987
私が全く期待していなかった何か。2 番目の結果はかなり不正確だと思いましたが、最初の結果はかなり外れていました。
次に、別の PC で同じプログラムを実行したところ、次の結果が得られました。
00:03:20.6866734 00:00:00.998287
私はかなり驚いた。
ここでの私の質問は、この問題をどのように修正できるかではありません。十分に正確であるため、2番目の方法を使用することをすでに決定しています...むしろ、啓発を求めます。
これはどうしてですか?最初の結果がそれほど不正確なのはなぜですか? これが別のマシンで大きく異なるのはなぜですか?
メソッドを間違って使用していた場合に備えてmsdnをチェックしましたが、そこにある例では、私の結果は不可能であることを示しています...
注:
CMOS バッテリーが切れている/死んでいると思いますが、それは要因ですか?