假设有两个属性的飞机类;海拔和海拔变化:
public class Aircraft
{
public double Altitude { get; set; }
public AltitudeChange { get; set; }
}
海拔变化有两个性质;高度和爬升率:
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);
}
例如,此线程不会停止爬升过程,因为双精度数通常不会完全相等。
即使您将双精度值转换为 int,您仍然不能 100% 确定这两个值是否相等。