Точный таймер на Javascript для приложений в стиле Metro

Я разрабатываю приложение в стиле метро с HTML5, CSS3 и Javascript, в котором мне нужен точный таймер. setInterval() здесь не подходит, потому что он недостаточно точен.

Я пробовал с Windows.System.Threading, но, похоже, он не реализован в javascript (и я не думаю, что это будет). Я также пробовал что-то вроде:

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

Но очевидно, что это не сработало.

Кто-нибудь знает, как я мог это сделать?

Спасибо.


person bvaldivielso    schedule 09.03.2012    source источник
comment
кажется, вы ждете определенного момента (init + someTime).. как насчет setTimeout(code, delay) ? С какой целью оно могло быть недостаточно точным? Может быть, вам нужен другой подход тогда ..   -  person Dennis    schedule 09.03.2012
comment
Нет, я действительно имел в виду setInterval(). Это правда, что мой код был больше похож на setTimeout(), но именно это я и пытался сделать. Это недостаточно точно для реального таймера, который должен работать в фоновом режиме.   -  person bvaldivielso    schedule 09.03.2012
comment
Не могли бы вы уточнить, что вы хотите сделать, или, более конкретно, почему setInterval недостаточно точен?   -  person Henry    schedule 09.03.2012
comment
Я пытаюсь сделать таймер. Точно так же, как таймер помидора, установка интервала в одну секунду для обновления таймера. Когда вы запускаете приложение в фоновом режиме, таймер не измеряет реально прошедшее время.   -  person bvaldivielso    schedule 09.03.2012


Ответы (2)


Не уверен, что понимаю ваш вопрос, но кажется, что вместо того, чтобы получать большую точность, вы просто хотите убедиться, что таймер срабатывает в нужное время, ваше приложение находится на переднем плане или иным образом.

В приложениях 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

person Andy    schedule 16.03.2012

Я не знаю о каких-либо вызовах, доступных непосредственно в Javascript для вас. Но вы можете написать оболочку WinRT вокруг вызовов Win32 QueryPerformanceCounter и QueryPerformanceFrequency с помощью C# или C++. Эти два вызова помогут вам создать таймер высокой точности.

person sarvesh    schedule 09.03.2012