如何计算虚拟机的运行时间与系统时间的计算方式?我知道我可以通过调用以下方式获取AVM的当前运行时间:
getTimer();
我可以通过以下方式获得当前的unix系统时间:
new Date().getTime();
我知道Timer类和Event.ENTER_FRAME事件都有它们的起伏,但我认为我比较的2个值应该保持相对于彼此。这就是我测试它的方式:
private var _appRunTime:int;
private var _appStartTime:int;
private var _systemTime:int;
private var _systemCurrentTime:int;
//called at application launch
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
_systemTime = new Date().getTime();
_appStartTime = getTimer();
}
//called on button click to see values
protected function button1_clickHandler(event:MouseEvent):void
{
_systemCurrentTime = new Date().getTime();
_appRunTime = getTimer();
trace(_systemCurrentTime - _systemTime, _appRunTime - _appStartTime);
}
我不明白为什么这些数字会慢慢失去同步。使用该代码,我发现,至少在我的计算机上,这些值彼此相距约3毫秒/分钟,其中值来自系统时间的较高值,来自AVM时间的值是低。
任何人都可以向我解释一下这些计算方法以及为什么随着时间的推移,它们的价值会出现那个小而却日益增长的差距?
答案 0 :(得分:1)
在我的系统上,相同的代码在getTimer()
和getTime()
之间没有区别
约10分钟后,差异始终在0到1毫秒之间。
也许这是你的系统问题或你正在运行的玩家的特定问题?
我在Win 7 x64上运行flash player 11。
答案 1 :(得分:0)
在我的计算机上(Win 7 64位),有时getTimer
的运行速度低于Date.getTime()
(系统时间),但有时getTimer()
运行得更快。差值范围为-0.57ms / sec至0.1ms / sec。
结果与在浏览器或Flash独立播放器中运行无关。
答案 2 :(得分:0)
它会帮助你......
public static function getDaysBetweenDates(date1:Date,date2:Date):int
{
var one_day:Number = 1000 * 60 * 60 * 24
var date1_ms:Number = date1.getTime();
var date2_ms:Number = date2.getTime();
var difference_ms:Number = Math.abs(date1_ms - date2_ms)
return Math.round(difference_ms/one_day);
}