C# 减去 DateTimes 给出了不切实际的结果
C# Substracting DateTimes is giving unrealistic result
这是我的场景:
玩家将手指或鼠标放在屏幕底部的“起始位置”标记上。
计时器开始计时到 500 毫秒,如果用户在这段时间内没有抬起手指或标记,则会触发 holdTimerElapsed。
在此方法中,我们显示下一个标记,延迟 500 毫秒到 1 秒之间的任何时间(以便用户有机会看到下一个目标)。延迟后,播放音频“GO”并启动计时器。
定时器启动方法里面:
private void StartTimer()
{
startTime = DateTime.Now;
timer.Interval = ConfigurationService.GameConfig.MarkerTimeLimit;
timer.AutoReset = false;
timer.Start();
}
我们记录这些运动的 "start time"。如果用户能够在指定时间(4.5 秒)内单击弹出的下一个目标,我们将调用停止计时器方法:
private void StopTimer()
{
stopTime = DateTime.Now;
timer.Stop();
}
我的问题:
"Randomly" 结果:
TimeSpan time = stopTime - startTime;
减去 500 毫秒的保持时间将是不切实际的 2-5 毫秒 - 除了机器人之外的任何人都不可能移动时间。
我完全不知道为什么日期时间会如此接近,结果却如此之小。
更多代码:
private void HandleMarkerClick(ScatterCircle selectedCircle)
{
StopTimer();
selectedCircle.Aquired = true;
aquiredTrainingCircles.Add(selectedCircle);
TimeSpan time = stopTime - startTime;
// movementTime here 'randomly' ends up as <10ms
long movementTime = (long) time.TotalMilliseconds - ConfigurationService.GameConfig.MarkerHoldTime;
}
我在这种情况下只处理基准移动的毫秒,它们需要相对准确,任何小于 100 毫秒的一般都是 "to fast to be real"
为了结束这个问题,我采纳了 Jon Skeet 的建议并切换到 Stopwatch
class。客户端仍然有不一致的结果。
我无法重现问题,长话短说,客户端 运行 笔记本电脑上的应用程序处于省电模式,我认为这是导致不一致的原因。
从省电模式切换到高性能似乎解决了大部分问题。
这是我的场景:
玩家将手指或鼠标放在屏幕底部的“起始位置”标记上。
计时器开始计时到 500 毫秒,如果用户在这段时间内没有抬起手指或标记,则会触发 holdTimerElapsed。
在此方法中,我们显示下一个标记,延迟 500 毫秒到 1 秒之间的任何时间(以便用户有机会看到下一个目标)。延迟后,播放音频“GO”并启动计时器。
定时器启动方法里面:
private void StartTimer()
{
startTime = DateTime.Now;
timer.Interval = ConfigurationService.GameConfig.MarkerTimeLimit;
timer.AutoReset = false;
timer.Start();
}
我们记录这些运动的 "start time"。如果用户能够在指定时间(4.5 秒)内单击弹出的下一个目标,我们将调用停止计时器方法:
private void StopTimer()
{
stopTime = DateTime.Now;
timer.Stop();
}
我的问题:
"Randomly" 结果:
TimeSpan time = stopTime - startTime;
减去 500 毫秒的保持时间将是不切实际的 2-5 毫秒 - 除了机器人之外的任何人都不可能移动时间。
我完全不知道为什么日期时间会如此接近,结果却如此之小。
更多代码:
private void HandleMarkerClick(ScatterCircle selectedCircle)
{
StopTimer();
selectedCircle.Aquired = true;
aquiredTrainingCircles.Add(selectedCircle);
TimeSpan time = stopTime - startTime;
// movementTime here 'randomly' ends up as <10ms
long movementTime = (long) time.TotalMilliseconds - ConfigurationService.GameConfig.MarkerHoldTime;
}
我在这种情况下只处理基准移动的毫秒,它们需要相对准确,任何小于 100 毫秒的一般都是 "to fast to be real"
为了结束这个问题,我采纳了 Jon Skeet 的建议并切换到 Stopwatch
class。客户端仍然有不一致的结果。
我无法重现问题,长话短说,客户端 运行 笔记本电脑上的应用程序处于省电模式,我认为这是导致不一致的原因。
从省电模式切换到高性能似乎解决了大部分问题。