【发布时间】:2013-04-23 03:45:39
【问题描述】:
背景: 车辆动力学有一个发展,作为增加现实行为的尝试,计算结果是实时执行的,与现实生活中的比例为 1:1,即现实生活中的 1 秒= 1 秒计算结果。
问题:在 Windows XP/Vista/7 甚至 MacOS 下,一切都按预期运行,但在 Windows 8 中,应用程序的运行速度(似乎是)正好慢了 2 倍。
详情: 延迟由
执行System.Threading.Thread.Sleep((Int32)time_delta)
为time_delta,按1:1时间比例计算。
在 Windows 8 下,现实生活中的 1 秒需要 2 秒,但是我可以使用 time_delta/2.0f 但这似乎是一个肮脏的把戏。
问题:有没有合适的方法来解决这个问题?
参考资料: 我搜索了一下,发现好像是报的问题: Missing .NET features in Metro style application?
此链接显示http://msdn.microsoft.com/en-us/library/d00bd51t.aspx Thread.Sleep 在 Windows 8 下受支持。
提前致谢。
更新:我错了,Windows 8 的延迟并不完全慢 2 倍,Sleep() 的分辨率似乎发生了巨大变化并且(至少在我的测试下)变化很大,所以我最终每次检测到偏移时都使用实时调整,这有点 CPU 密集型但现在可以工作了。
【问题讨论】:
-
d你能验证
Sleep(1000)实际上需要2000毫秒吗?还是您的程序正在做一些较小的睡眠?例如,Sleep(7)可能需要 15 毫秒,因为Sleep的分辨率可能不在毫秒级别。 -
@JimMischel Small 根据需要在这里和那里睡觉,这似乎是问题所在,我正在考虑将所有延迟都放在一个上,首先查看 GUI 是否不同步正在实时更新。测试后会更新。
标签: c# silverlight windows-8 thread-sleep