Здравствуйте, OpenGL, Вы писали:
OGL>>>Дело в том что вызов write(audio_dev,...) является блокирующим, нужно чтобы он был асинхронным, то есть ждать события, или мютекса после того как все тыграется. Как это сделать собстенно , если вообще OSS и RH 9.1 это позволяют?
А>>А если так: А>> Два потока и защищённая от одновременного доступа очередь буфферов данных. А>> Перевый готовит данные и ставит их в очередь. А>> Второй поток пишет их в устройство (write). А>> Очередь можно защитить обычными семафорами.
OGL>Я так и сделал, Все просто. Надо чтобы не один буффер ни улетел куда-нить. А то он где то через 1-2 минуты начинает пропускать блоки, идут щелчки. Нужен метод на подобие write только без блокировки, чтобы можно было точно дождаться конца проигрывания.
Я чего-то не понял.
Куда буфферы улетают?
OpenGL> чтобы можно было точно дождаться конца проигрывания.
Это и есть write.
Эта функция ждёт конца закачки (проигрывания) буффера в устройство (блокируется до конца проигрования).
Вы сами драйвер устройства писали?
Сдаётся мне что у вас либо с драйвером что-то либо с алгоритмом.
Если очередь реализована верно то в цыкле write потока (поток закачки) из очереди будут
извлекаться буффер за буффером в нужном порядке и с минимальной задержкой отправлятся в устройство.
Возможно так же, что данные просто не успевают закачиваться в устройство в нужном темпе.
Может устройство не правильно работает.
Устройство и драйвер вашей разработки или?