|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
||||||
.NET 4.x Неточность компонента Timer18.03.2017, 19:55. Показов 1815. Ответов 19
Метки нет (Все метки)
Добрый вечер!
Вот прямо проблема за проблемой... Есть вот такой вот код:
Однако при сравнении показаний label2 с показаниями часов windows, погрешность вылазит аж на 6 секунд (отстает)!!! Это че ж, мать-перемать его, такое? ![]() ![]() Сорри за мой скромный русский. P. S.: Intel Core i7 2600 (4 ядра, гипертрединг на 8)
0
|
||||||
| 18.03.2017, 19:55 | |
|
Ответы с готовыми решениями:
19
Как вычислить погрешность компонента Timer Отсутствует событие Elapsed компонента Timer Создание своего компонента на основе компонента Timer |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 18.03.2017, 20:03 | |
|
Для чего вам точность? Она вам либо не нужна, либо вы что-то не так делаете. А Timer и не обязан точно работать.
0
|
|
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
|
| 18.03.2017, 20:11 [ТС] | |
|
Someone007, не знаю что там должно или не должно, но я привык к тому что при работе с микроконтроллером нету ничего точнее, чем прерывание по таймеру. Хотелось верить, что здесь таймер - не одно только название!
Для чего - вопрос второстепенный, допустим, секундомер хочу сделать и тикать миллисекунды хочу. Но, как я вижу "из это роя не выйдет ....." Может есть тогда действительно точные методы замеров времени?
0
|
|
|
|
|
| 18.03.2017, 20:41 | |
|
Stass48, забудьте про МК, здесь совсем не так и это считается нормально.
Данный компонент таймера с таймерами МК имеет общего только лишь название и наличие callback'ов. Лучше опишите задачу, в которой понадобилось точно время замерять.
2
|
|
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
|
| 18.03.2017, 21:25 [ТС] | |
|
Rius, ovva, Someone007,
вот наконец конструктивный диалог складывается ![]() Мне нужно сделать кроссфейд между двумя песнями на Bass. Для этого хочу управлять громкостями этих песен, но кроме этого, хочу дать юзеру возможность выставить длительность кроссфейда. Кинулся мучать таймер. Выставил интервал 1 мс.. Сделал счетчик и смотрю, что уж больно он медленно считает.... Думаю, мол, наверное не успевает вычислять и что из-за этого накапливается очередь и т. п... Ладно, думаю дальше... поставлю ка 100 мс... За 100 уж точно должно успеть посчитать и очереди не будет... Кинулся проверять - да, погрешность действительно меньше! Но все равно отставать на 6 секунд за минуту реального времени это ж вообще капец... Добавлено через 4 минуты Так что же из этого всего посоветуете?
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 18.03.2017, 21:34 | |
|
Что нибудь типа этого: https://www.codeproject.com/Ar... -Framework
1
|
|
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
|
| 18.03.2017, 21:54 [ТС] | |
|
Rius, для аудиоредактора уж точно потребовалась бы высочайшая точность...
Но нет, это просто плеер и мне нужен плавный переход между треками. Someone007, весьма интересное решение, по крайней мере на первый взгляд. Но нужно "пощупать"
0
|
|
|
|
|
| 18.03.2017, 21:56 | |
|
Stass48, не знаю, как именно воспроизводится звук нынче. Но теоретически можно было бы считать оба файла в буфер, полностью или участками по мере необходимости, поменять громкость участков в буфере, и уже их воспроизводить.
0
|
|
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
|
| 18.03.2017, 22:13 [ТС] | |
|
Rius, но ведь это займет ресурсы/время, что в моем случае недопустимо.
0
|
|
|
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|||||||||||
| 18.03.2017, 22:13 | |||||||||||
|
Stass48, когда мне понадобились точные отсчёты времени (10-15 мс), то я нашёл реализацию таймера, который полностью меня устроил.
Кликните здесь для просмотра всего текста
Правда на c#, но можно упаковать в библиотеку и дёргать нужные методы и события. Событие у него одно: Elapsed. Возникает в отдельном потоке.
1
|
|||||||||||
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||||||
| 18.03.2017, 22:27 | ||||||
|
Можно обойтись обычным sleep и завернуть в отдельный поток?
0
|
||||||
|
|
|
| 18.03.2017, 22:43 | |
|
Jungl, нельзя, это костыль, к тому же вообще не работающий.
Никогда так не пишите. Добавлено через 14 минут Jungl, собственно, одного наличия в коде методов DoEvents (Qt и .Net) или ProcessMessages (Delphi/BCB) достаточно, что выпилить код полностью, ибо это страшный костыль.В вашем случае всё усугубляется тем, что якобы в потоке якобы выполняется метод OneProcess и код в нём. Только вот код этот на самом выполняется в цикле сообщений окна, что делает тот поток ненужным чуть более, чем полностью. А ещё Thread.Sleep имеет малоизвестные особенности, могущие предоставить множество часов интереснейшей отладки. Jungl, в .Net есть замечательные средства для работы с потоками. Изучайте их. Не плодите чудовищ.
2
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||||||
| 18.03.2017, 22:55 | ||||||
|
Простите, не по душе мне, когда таскаешь форму, а циферки стоят. Можно и через таймер со StopWatch'ем?
Rius, спасибо за критику, я ее всегда приветствую. Согласен про потоки, пока окончательно не разобрался в них. Учимся. А что конкретно с DoEvents не так? Я право не могу пока понять смысл вашего предложения относительно DoEvents
0
|
||||||
|
|
|||||||
| 18.03.2017, 23:04 | |||||||
|
Jungl,
1
|
|||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 18.03.2017, 23:05 | |
|
0
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||
| 18.03.2017, 23:12 | ||
|
Rius, благодарю.
1. А если мне хочется обновить данные на контроле формы? Me.Refresh? 2. Взято на заметку. 3. Переход с VBA дает о себе знать.
0
|
||
|
|
|
| 18.03.2017, 23:18 | |
|
Неа,
Me.Refresh тоже костыль Если данные предоставлены в окно правильным способом, а цикл сообщений окна не загружен всякой фигнёй, которой в нём совсем не место, то окно само обновится быстро.Stopwatch выдаёт значение промежутка времени между Start и Stop, а не вызывает что-то периодически.Тут простой пример выкладывал с обновлением GUI из потока.
0
|
|
| 18.03.2017, 23:18 | |
|
Помогаю со студенческими работами здесь
20
Обработчик события OnTimer компонента Timer Как сделать паузу 3 секунды у компонента Timer? Свойство Stretch компонента Image тормозит Timer Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|