1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

MediaPlayer в отд.потоке останавливает осн.поток

Тема в разделе "MS Visual C++", создана пользователем Bazil, 13 апр 2005.

Статус темы:
Закрыта.
  1. Bazil

    Bazil Гость

    Репутация:
    0
    Есть задача: Организовать последовательное воспроизведение группы wav-файлов в отдельном потоке, чтобы не тормозить на время воспроизведения главный поток программы.

    Был создан программный поток (TThread) и в него помещен вызов в цикле MediaPlayer с параметром MediaPlayer1->Wait=true c перебором всех файлов для воспроизведения. Проблема заключается в том, что на время воспроизведения все таймеры главного потока программы останавливаются, и продолжают работу только после окончания воспроизведения wav.
    Испробован вариант с MediaPlayer1->Wait=false и с последующей паузой Sleep() длительностью в длину wav-файла. Результат тот же.
    При замене вызова MediaPlayer1 на простой вывод значения счетчика Label2->Caption=IntToStr(cnt1); cnt1++; Sleep(2000); все нормально работает.

    Подскажите, в чем тут дело, pliz
     
  2. Barmutik

    Barmutik Гость

    Репутация:
    0
    Можно попытаться проигрывать функцией sndPlaySound в асинхронном режиме... точно никаких тормозов не будет .. даже если запускать проигрывание в основном потоке
     
  3. Bazil

    Bazil Гость

    Репутация:
    0
    Функции sndPlaySound, PlaySound и MediaPlayer ведут себя одинаково. После множества экспериментов выяснилось, что причиной торможения основного потока программы является вызов функции проигрывания в Thread::Execute c помощью Synchronize(). Причем торможение проявляется независимо от режима (синхронный, асинхронный). При вынесении функции из-под Synchronize() прямо в Execute все проблемы пропали. Осталась только одна: каким образом защититься от одновременного обращения к этой же медиа-функции из основного потока, если Synchronize() для этого использовать нельзя ? Вероятно, единственный метод - вызов sndPlaySound("..",SND_NOSTOP) для проверки занятости драйвера ...
     
Загрузка...
Похожие Темы - MediaPlayer отд потоке
  1. vadpetr
    Ответов:
    0
    Просмотров:
    1.387
  2. Dock1100
    Ответов:
    14
    Просмотров:
    7.613
  3. Dock1100
    Ответов:
    24
    Просмотров:
    12.340
  4. VahaC
    Ответов:
    0
    Просмотров:
    2.167
  5. Pooh1194
    Ответов:
    8
    Просмотров:
    329
Статус темы:
Закрыта.

Поделиться этой страницей