By default, all mixer applications are required to keep up-to-date with all mixer changes.
Keeping up-to-date with all mixer changes is done by enqueuing a mixer-change event on all applications other than the application making a change. The driver enqueues these events on all applications that have an open mixer handle, unless the application uses the snd_mixer_set_filter() API call to mask out events it's not interested in.
Applications use the snd_mixer_read() function to read the enqueued mixer events. The arguments to this function are the mixer handle and a structure of callback functions to call based on the event type.
You can use the select() function (see the QNX Neutrino C Library Reference) to determine when to call snd_mixer_read(). To get the file descriptor to pass to select(), call snd_mixer_file_descriptor().