2012-03-09 63 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

相關問題