Запустить один поток из многих других - PullRequest
0 голосов
/ 23 сентября 2019

Я работаю над написанием своей собственной строки состояния, которая включает в себя множество модулей (рабочие пространства, часы, открытые окна и т. Д.), Каждый из которых работает в своем собственном потоке.Каждый из этих модулей независимо ожидает события, которое они обнаруживают (например, минута, проходящая для модуля часов) и после которого они обновляют свое внутреннее значение, которое предназначено для чтения основным потоком, который отображает саму панель.Моя проблема сейчас в том, как мне сообщить основному потоку, что произошло обновление, и он должен проснуться и распечатать новую панель?Я посмотрел на условные переменные, но поскольку нет взаимных исключений для синхронизации основного и рабочего потоков, это не представляется возможным.Если бы я делал это в ржавчине, я бы использовал канал mpsc, чтобы мой основной поток ждал, чтобы прочитать из него, и чтобы модули отправляли пустое () сообщение, когда они обновляются, чтобы вызвать основной поток для повторной печати панели.Есть ли подобный эквивалент в C ++?

1 Ответ

1 голос
/ 24 сентября 2019

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

...