У меня есть следующая структура программы в OSX/Darwin:
Поток-производитель генерирует данные и передает их в кольцевой буфер.
Потребительский поток CoreAudio в реальном времени визуализирует данные из кольцевого буфера в ЦАП.
Они координируются с помощью dispatch_semaphores.
Параметры потока производителя можно контролировать с помощью графического интерфейса пользователя (GLUT, не какао) или MIDI.
Что касается управления производителем из графического интерфейса, все работает очень хорошо.
Однако обратный вызов midiReadProc() «живет» в своем собственном потоке реального времени, из которого поток производителя не должен ни контролироваться, ни уведомляться, но MIDI-данные должны каким-то образом передаваться в вместо этого основной поток, из которого поток производителя должен быть поставлен в очередь и обновлен.
Есть ли способы сделать это, не будучи слишком специфичным для OSX?
Заранее спасибо.