2 つのプロパティを持つ架空の Aircraft クラスを考えてみましょう。高度と高度変化:
public class Aircraft
{
public double Altitude { get; set; }
public AltitudeChange { get; set; }
}
高度の変化には 2 つのプロパティがあります。高度と上昇率:
public class AltitudeChange
{
public double Altitude { get; set; }
public double RateOfClimb { get; set; } //Negative for descent
}
経過時間と上昇率に基づいて航空機の高度を更新する「ワーカー スレッド」がある場合、新しい高度に達したときにループが確実に停止するようにするための理想的な設計/実装は何ですか?
private void AltitudeThreadWork()
{
var updated = DateTime.Now;
while (Aircraft.Altitude != AltitudeChange.Altitude)
{
UpdateAltitude((DateTime.Now - updated).TotalMilliseconds);
updated = DateTime.Now;
Thread.Sleep(40);
}
}
private void UpdateAltitude(double ellapsed)
{
Aircraft.Altitude += ellapsed*(AltitudeChange.RateOfClimb/60000d);
}
たとえば、倍精度数が互いに正確に等しくならないことが多いため、このスレッドは上昇プロセスを停止しません。
double を int にキャストしても、2 つの値が等しいことを 100% 保証することはできません。