Установить или снять режим блокировки при чтении/записи в PCM канале
#include <sys/asoundlib.h>int snd_pcm_nonblock_mode( snd_pcm_t *handle,int nonblock );
0
, для всех последующих вызовов snd_pcm_read() и snd_pcm_write() действует неблокирующий режим операций.libasound
Функция snd_pcm_nonblock_mode() настраивает блокирующий (по умолчанию) или неблокирующий способ взаимодействия с дескриптором handle.
При блокирующем режиме выполнение приложения приостанавливается, когда в буфере драйвера нет места при записи или он является пустым при чтении.
При неблокирующем режиме приложения не блокируются, а функции чтения и записи немедленно возвращают управление и передают число считанных/записанных драйвером байт данных. Используя дескриптор в такой манере, не следует расчитывать на то, что весь используемый буфер был обработан. Ориентироваться следует исключительно на возвращаемое функциями snd_pcm_read() и snd_pcm_write() значение.
ЗОСРВ «Нейтрино»
Если это возможно, в приложении рекомендуется использовать select() с файловым дескриптором PCM устройства, вместо использования данной функции. Асинхронное получение уведомлений от драйвера гораздо экономнее в части ресурсов CPU, чем поллинг в цикле с неблокирующим опросом.
snd_pcm_open(), snd_pcm_open_preferred(), snd_pcm_read(), snd_pcm_write()
Предыдущий раздел: Библиотека libasound