Я разрабатываю приложение на C ++, которое обрабатывает аудиопоток в реальном времени с использованием очереди.
Мне сложно понять технологию, используемую между многопоточной очередью и очередью отправки. Как синхронизировать рабочие потоки?
Вот процесс:
- Основной поток слушает микрофон, чтобы получить аудиовход.
- Основной поток сообщений в очередь каждый раз, когда доступен аудиосигнал, и вернуться к своей работе прослушивания.
3. Рабочий поток будет извлекать элементы из очереди и обрабатывать данные.
Я реализовал эту концепцию в Android, Android имеет класс «HandlerThread», который выполняет точно такую же работу с Looper чтобы очередь оставалась живой. Но в C ++ я не знаю, как это сделать. Я прочитал из очереди асинхронной отправки . Но в этой статье метод публикации и рабочий поток асинхронны.
Порядок важен для меня, порядок, в котором я возвращаю результаты в основной поток, должен соответствовать порядку, взятому из очереди. Если, например, у нас есть в очереди: data1 (первый), data2 (второй), data3 (третий), я должен вернуть в основной поток результаты в том же порядке. Я застрял в том, как это сделать на C ++. Если поток data3 завершается раньше потока data1, моя последовательность нарушается. Я должен соблюдать последовательность. Боюсь, что мои темы потребуют серьезного управления. Я бы хотел этого избежать.
В основном я хотел бы реализовать эту концепцию на c ++. видео здесь
Может ли кто-нибудь помочь мне понять, как реализовать это на C ++ или придумать лучшую идею?
Надеюсь, это достаточно ясно. Спасибо за вашу помощь. Реми