![]() |
Очень точный таймер
Вобщем... столкнулся с такой вот незадачей... нужен таймер, который бы работал на порядок точнее родного... Т.е. по тех характеристикам в течение 45 секунд должен тикать каждые 33 миллисекунды с погрешностью не более 6 миллисекунд (и при этом, желательно не сильно нагружать процессор)... Даже, не, скорее не так: нужно добиться, чтобы функция вызывалась точно по истечении 33 миллисекунд (само по себе выполнение функции примерно укладывается в это же время).
Что я уже попробовал: - запускать таймер с минимальным интервалом. (эмпирическим путем выяснилось, что разницы между 1-6..8 миллисекунд практически нету. При вызове раз в 10 миллисекунд погрешность составляет примерно 6-15 миллисекунд (почти в 3 раза... млин =( ). Т.е. можно высчитывать дельту между ожидаемым временем тика и реальным, и немного постаравшись результаты примерно укладываются в +-6 мс, но тестится все в "тепличных условиях", боюсь, что на практике окажеться хуже... - просто в цикле проверять текущее время, конечно, работает, но во время цикла все равно ничего не сделаешь %) ЗЫ. сравнительные тесты сетИнтервала/сетТаймаута и Таймера - примерно одинаково, особой разницы не заметил. ЗЫЫ. просто интересны варианты решения, мб есть что-нибудь, о чем не подумал. ЗЫЫЫ. ессно, не нужно думать, что этим кто-то собирается пользоваться, но нужно добиться примерно похожих результатов... Код:
package |
имхо гиблое дело, если речь о плеере/плагине
только в цикле отслеживать, но это работа на сам таймер попробовал рядом запустить флешку, которая как раз только этим и занимается и по LocalConnection докладывает основной, но там десятки мс теряются влегкую, что сводит на нет эту затею.. других вариантов не вижу |
Помоему, надо совсем другой подход применять - для создания таймера повышенной точности. Нужно привязываться к тактам, за которые выполняется оператор и вывод данных отдельно подготавливать.
В общем, флеш неоправдан. |
silin:
угу, тоже думал, но фик там... =) aksios: ну это по определению должен быть флеш... было бы что-то другое, наверное, по другому бы и решал... тут проблема еще и такая, ну, предположим, я знаю, когда функция закончила работать, и до следующего вызова осталось около 10 миллисекунд, и, тут-то, млин незадача, как ее вызвать-то именно через 10 миллисекунд, а не через 5-15... заускать цикл так как в примере - хреновый вариант т.как параллельно с флешкой должно быть запущено еще одно приложение (обязательно), а когда флешка начинает считать цикл она (по крайней мере на моем компе) занимает 1 проц на 100% (у мну их 2 х 2,3)... а это как-то очень жирно для такой нехитрой операции как "ничего не делать" %) |
| Часовой пояс GMT +4, время: 11:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.