Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2016, 13:22   #1
Кинунен
Новичок
Джуниор
 
Регистрация: 09.08.2016
Сообщений: 4
Восклицание Ускоряется время компьютера при воспроизведении звукового файла

При программировании (Builder C++ 3) столкнулся с неожиданной и непонятной проблемой:
в программе при воспроизведении звукового файла (mp3 или wav) на ряде компьютеров и в разных ОС Windows (XP Home и Prof, Win7) происходит ускорение системного таймера!
Примерно на 1 сек за 50 сек.
Похоже, на один тик (20 мс) в секунду.
Устойчиво! На компах с Win10 пока не наблюдал.
Писал и mciSendCommand(0, и PlaySound(). Эффект дин.
Помогите! Критически важно понять и устранить эту проблему!
Буду очень благодарен!
Кинунен вне форума Ответить с цитированием
Старый 09.08.2016, 13:38   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Что вы подразумеваете под системным таймером? Как измеряли ускорение?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 09.08.2016, 14:07   #3
Кинунен
Новичок
Джуниор
 
Регистрация: 09.08.2016
Сообщений: 4
По умолчанию

У нас есть сетевая система нами разрабатываемых прикладных программ и полигон с лок сетью из нескольких компов для отладки системы.
1) Ускорение времени говорящего (асинхронная mciSendCommand) компа зафиксировала сначала наша встроенная подпрограмма синхронизации времени - периодическим сравнением с выделенным "компьютером-сервером времени".
2) Увидев это, я искусственно зациклил это сообщение в говорящей программе, отключил в программе подпрограмму синхронизации времени, вывел на оба компа (говорящий и "сервер времени") системную панель времени, визуально засек времена и через час их снова сверил: говорящий комп ушел вперед на 70 сек.
3) За это время на других (молчавших) компах полигона время стояло как влитое. То же происходит и с говорящим компом, когда он молчит.
4) В программе переписал говорилку с mciSendCommand на PlaySound - эффект не изменился.
5) Быстро наклепал тестовую программу с компонентом Builder-а TMediaPlayer (использует асинхронный mciSendCommand) и на компе запустил её одну (в условиях 2) - эффект тот же.
Чёрт его знает, что делать? В сети таких ситуаций не нашел.
Происходит это на каких-то сочетаниях ОС и железа, что ли?

Последний раз редактировалось Кинунен; 09.08.2016 в 14:23.
Кинунен вне форума Ответить с цитированием
Старый 09.08.2016, 14:54   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Вообщето это стандартнои и известное поведение мультимидийных программ. И нетолько, субд и прочии любят изменять дискертность системного таймера с 15.65-20 мс на 1 мс. Команда эта системной в том смысле что влияет на все программы разом.https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
Для звука это надо чтобы он не заикался при воспроизведении.
Делается это командой:https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
Но на часы это не влияет это видимо из-за сменя дискретности одна из ваших программ начинает переводить часы в неправильную сторону.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 09.08.2016, 15:04   #5
Кинунен
Новичок
Джуниор
 
Регистрация: 09.08.2016
Сообщений: 4
По умолчанию

"это видимо из-за сменя дискретности одна из ваших программ начинает переводить часы в неправильную сторону."
Исключено: см. п. 5 (там голая форма)

Последний раз редактировалось Кинунен; 09.08.2016 в 15:08.
Кинунен вне форума Ответить с цитированием
Старый 09.08.2016, 15:21   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
компа зафиксировала сначала наша встроенная подпрограмма синхронизации времени - периодическим сравнением с выделенным "компьютером-сервером времени".
а это что?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.08.2016, 18:36   #7
Кинунен
Новичок
Джуниор
 
Регистрация: 09.08.2016
Сообщений: 4
По умолчанию

Повторяю пункт 5: "Быстро наклепал тестовую программу с компонентом Builder-а TMediaPlayer (использует асинхронный mciSendCommand) и на компе запустил её одну - эффект тот же: визуально время так же поплыло."
То есть тестовая программа ничего не делала вообще, только в цикле крутила wav-файл через класс TMediaPlayer (функция Play()) Builder-a.

Сейчас переписал вызов этих функций в программе на отдельный поток, всё равно не помогло.


Я прочёл Ваши ссылки о media-таймерах. Спасибо!
Но что мне надо сделать с этими функциями при вызове файла на проигрыш и после прекращения проигрыша, чтобы таймер компа во время проигрыша файла не уходил вперед?
Может, где-то есть пример решения этой задачи?
Кинунен вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемотка при воспроизведении видео D!zel Общие вопросы Delphi 2 05.03.2013 15:54
Бегущая строка при воспроизведении музыки. munthrekosh Мультимедиа в Delphi 2 19.02.2012 06:46
Ошибка при воспроизведении элемента ListView .Phoenix Мультимедиа в Delphi 3 22.03.2010 20:36
траблы при воспроизведении макроса invester Microsoft Office Excel 0 28.01.2010 21:41
Показ визуализации при воспроизведении mp3 Vladya Мультимедиа в Delphi 3 05.09.2009 01:14