Как синхронизировать рабочие потоки в очереди FIFO в c ++ - PullRequest
0 голосов
/ 17 июня 2020

Я разрабатываю приложение на C ++, которое обрабатывает аудиопоток в реальном времени с использованием очереди.

Мне сложно понять технологию, используемую между многопоточной очередью и очередью отправки. Как синхронизировать рабочие потоки?

Вот процесс:

  1. Основной поток слушает микрофон, чтобы получить аудиовход.
  2. Основной поток сообщений в очередь каждый раз, когда доступен аудиосигнал, и вернуться к своей работе прослушивания.

3. Рабочий поток будет извлекать элементы из очереди и обрабатывать данные.

Я реализовал эту концепцию в Android, Android имеет класс «HandlerThread», который выполняет точно такую ​​же работу с Looper чтобы очередь оставалась живой. Но в C ++ я не знаю, как это сделать. Я прочитал из очереди асинхронной отправки . Но в этой статье метод публикации и рабочий поток асинхронны.

Порядок важен для меня, порядок, в котором я возвращаю результаты в основной поток, должен соответствовать порядку, взятому из очереди. Если, например, у нас есть в очереди: data1 (первый), data2 (второй), data3 (третий), я должен вернуть в основной поток результаты в том же порядке. Я застрял в том, как это сделать на C ++. Если поток data3 завершается раньше потока data1, моя последовательность нарушается. Я должен соблюдать последовательность. Боюсь, что мои темы потребуют серьезного управления. Я бы хотел этого избежать.

В основном я хотел бы реализовать эту концепцию на c ++. видео здесь

Может ли кто-нибудь помочь мне понять, как реализовать это на C ++ или придумать лучшую идею?

Надеюсь, это достаточно ясно. Спасибо за вашу помощь. Реми

...