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

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


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

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

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


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