2012-03-09 60 views
1

我正在开发一个带有HTML5,CSS3和JavaScript的metro风格的应用程序,其中需要一个精确的计时器。 setInterval()不适合这里,因为它不够精确。我试过用Windows.System.Threading,但它似乎并没有在JavaScript中实现(我不认为它会)。我也试过类似的东西:用于Metro风格应用程序的Javascript中的精确计时器

var date = new Date(); 
    var init = date.getTime(); 
    while(init + someTime < date.getTime()) 
     doNothing(); 
    doSomething(); 

但显然,这并没有奏效。

有人知道我该怎么做吗?

谢谢。

+0

你似乎是在等待某个特定时刻('INIT + someTime')..怎么样'的setTimeout(代码延迟)'?为什么目的不够精确?也许你需要一个不同的方法然后.. – 2012-03-09 14:46:06

+0

不,我真的意思是setInterval()。确实,我的代码更像setTimeout(),但它是我尝试的那种东西。这是不够精确的实际计时器必须在后台“定时” – bvaldivielso 2012-03-09 14:48:18

+1

你可以澄清你想要做什么,或者更具体地说,为什么'setInterval'不够精确 – Henry 2012-03-09 14:49:38

回答

0

我不知道任何直接在JavaScript中可用的电话,因为你这样做。但是你可以使用C#或C++编写一个WinRT封装器来绕过Win32调用QueryPerformanceCounter和QueryPerformanceFrequency。这两个电话将帮助你创建一个high precision timer

1

不知道我在跟踪你的问题,但它似乎而不是得到更多的精度,你只是想确保定时器在正确的时间触发,你的应用程序在前台或其他。

在Windows 8 Metro应用程序中,除非您的应用程序在进入后台时将停止执行代码,因此您的计时器将会丢失。相反,您应该使用后台任务来触发定时事件。

文档:http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.background.backgroundtaskbuilder.aspx

样品:http://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9

相关问题