snd_pcm_nonblock_mode()

Установить или снять режим блокировки при чтении/записи в PCM канале

Прототип:

#include <sys/asoundlib.h>
int snd_pcm_nonblock_mode( snd_pcm_t *handle,
int nonblock );

Аргументы:

handle
Дескриптор PCM устройства, созданный с помощью snd_pcm_open() или snd_pcm_open_preferred().
nonblock
Если этот аргумент не равен 0, для всех последующих вызовов snd_pcm_read() и snd_pcm_write() действует неблокирующий режим операций.

Библиотека:

libasound

Описание:

Функция snd_pcm_nonblock_mode() настраивает блокирующий (по умолчанию) или неблокирующий способ взаимодействия с дескриптором handle.

При блокирующем режиме выполнение приложения приостанавливается, когда в буфере драйвера нет места при записи или он является пустым при чтении.

При неблокирующем режиме приложения не блокируются, а функции чтения и записи немедленно возвращают управление и передают число считанных/записанных драйвером байт данных. Используя дескриптор в такой манере, не следует расчитывать на то, что весь используемый буфер был обработан. Ориентироваться следует исключительно на возвращаемое функциями snd_pcm_read() и snd_pcm_write() значение.

Возвращаемое значение:

0
Успешное завершение.
-EBADF
Некорректный файловый дескриптор. Параметр handle может быть поврежден.
-EINVAL
Некорректный аргумент handle.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Если это возможно, в приложении рекомендуется использовать select() с файловым дескриптором PCM устройства, вместо использования данной функции. Асинхронное получение уведомлений от драйвера гораздо экономнее в части ресурсов CPU, чем поллинг в цикле с неблокирующим опросом.

Тематические ссылки:

snd_pcm_open(), snd_pcm_open_preferred(), snd_pcm_read(), snd_pcm_write()




Предыдущий раздел: Библиотека libasound