![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 09.08.2016
Сообщений: 4
|
![]()
При программировании (Builder C++ 3) столкнулся с неожиданной и непонятной проблемой:
в программе при воспроизведении звукового файла (mp3 или wav) на ряде компьютеров и в разных ОС Windows (XP Home и Prof, Win7) происходит ускорение системного таймера! Примерно на 1 сек за 50 сек. Похоже, на один тик (20 мс) в секунду. Устойчиво! На компах с Win10 пока не наблюдал. Писал и mciSendCommand(0, и PlaySound(). Эффект дин. Помогите! Критически важно понять и устранить эту проблему! Буду очень благодарен! |
![]() |
![]() |
![]() |
#2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Что вы подразумеваете под системным таймером? Как измеряли ускорение?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 09.08.2016
Сообщений: 4
|
![]()
У нас есть сетевая система нами разрабатываемых прикладных программ и полигон с лок сетью из нескольких компов для отладки системы.
1) Ускорение времени говорящего (асинхронная mciSendCommand) компа зафиксировала сначала наша встроенная подпрограмма синхронизации времени - периодическим сравнением с выделенным "компьютером-сервером времени". 2) Увидев это, я искусственно зациклил это сообщение в говорящей программе, отключил в программе подпрограмму синхронизации времени, вывел на оба компа (говорящий и "сервер времени") системную панель времени, визуально засек времена и через час их снова сверил: говорящий комп ушел вперед на 70 сек. 3) За это время на других (молчавших) компах полигона время стояло как влитое. То же происходит и с говорящим компом, когда он молчит. 4) В программе переписал говорилку с mciSendCommand на PlaySound - эффект не изменился. 5) Быстро наклепал тестовую программу с компонентом Builder-а TMediaPlayer (использует асинхронный mciSendCommand) и на компе запустил её одну (в условиях 2) - эффект тот же. Чёрт его знает, что делать? В сети таких ситуаций не нашел. Происходит это на каких-то сочетаниях ОС и железа, что ли? Последний раз редактировалось Кинунен; 09.08.2016 в 14:23. |
![]() |
![]() |
![]() |
#4 |
Лис
Старожил
Регистрация: 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 Но на часы это не влияет это видимо из-за сменя дискретности одна из ваших программ начинает переводить часы в неправильную сторону.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 09.08.2016
Сообщений: 4
|
![]()
"это видимо из-за сменя дискретности одна из ваших программ начинает переводить часы в неправильную сторону."
Исключено: см. п. 5 (там голая форма) Последний раз редактировалось Кинунен; 09.08.2016 в 15:08. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 09.08.2016
Сообщений: 4
|
![]()
Повторяю пункт 5: "Быстро наклепал тестовую программу с компонентом Builder-а TMediaPlayer (использует асинхронный mciSendCommand) и на компе запустил её одну - эффект тот же: визуально время так же поплыло."
То есть тестовая программа ничего не делала вообще, только в цикле крутила wav-файл через класс TMediaPlayer (функция Play()) Builder-a. Сейчас переписал вызов этих функций в программе на отдельный поток, всё равно не помогло. Я прочёл Ваши ссылки о media-таймерах. Спасибо! Но что мне надо сделать с этими функциями при вызове файла на проигрыш и после прекращения проигрыша, чтобы таймер компа во время проигрыша файла не уходил вперед? Может, где-то есть пример решения этой задачи? |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перемотка при воспроизведении видео | 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 |