Re[4]: Асинхронный I/O со звуковым устройством.
От: OpenGL  
Дата: 28.04.04 16:55
Оценка:
Здравствуйте, Click, Вы писали:

C>Здравствуйте, OpenGL, Вы писали:


OGL>>>>Дело в том что вызов write(audio_dev,...) является блокирующим, нужно чтобы он был асинхронным, то есть ждать события, или мютекса после того как все тыграется. Как это сделать собстенно , если вообще OSS и RH 9.1 это позволяют?


А>>>А если так:

А>>> Два потока и защищённая от одновременного доступа очередь буфферов данных.
А>>> Перевый готовит данные и ставит их в очередь.
А>>> Второй поток пишет их в устройство (write).
А>>> Очередь можно защитить обычными семафорами.

OGL>>Я так и сделал, Все просто. Надо чтобы не один буффер ни улетел куда-нить. А то он где то через 1-2 минуты начинает пропускать блоки, идут щелчки. Нужен метод на подобие write только без блокировки, чтобы можно было точно дождаться конца проигрывания.


C>Я чего-то не понял.

C>Куда буфферы улетают?
C>OpenGL> чтобы можно было точно дождаться конца проигрывания.
C>Это и есть write.
C>Эта функция ждёт конца закачки (проигрывания) буффера в устройство (блокируется до конца проигрования).
C>Вы сами драйвер устройства писали?
C>Сдаётся мне что у вас либо с драйвером что-то либо с алгоритмом.
C>Если очередь реализована верно то в цыкле write потока (поток закачки) из очереди будут
C>извлекаться буффер за буффером в нужном порядке и с минимальной задержкой отправлятся в устройство.
C>Возможно так же, что данные просто не успевают закачиваться в устройство в нужном темпе.
C>Может устройство не правильно работает.
C>Устройство и драйвер вашей разработки или?

Да звук берется с моего устройства(ну нашего, не я его делал). Драйвер для него я писал,
Write передает управление мне чуть раньше чем блок отыграет или после того как отыграет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.