У меня есть устройство, которое передает некоторые события. Я хочу использовать реактивные расширения для моделирования следующего поведения:rxcpp: вложенный цикл или аналогичная «классическая» императивная структура для программы
- Обнаружить, когда пользователь подключает ключ (моя программа проверяет наличие событий для присоединенного ключа).
- Начните снимать поток данных с ключа после подключен ключ.
- Уметь обнаруживать, когда ключ отсоединен и вернуться к 1., позже, если пользователь снова подключит ключ, я хочу перейти на 2. В состоянии, когда я передаю данные, если клавиатура попала, программа заканчивается ,
Я знаю, как ждать подключения ключа (1.):
auto waitForDongle = events.take_while([](auto const & event) {
return event == DongleConnected
}).subscribe([](auto) {});
И я знаю, как захватить поток (2.):
auto streamMotionData = events.take_while([](auto const &) { return !keyboardPressed(); })
.map([](auto const & evt) -> boost::optional<std::vector<double>> {
...
return data;
}).subscribe([](vector<double> const &) { ...});
Моя проблема заключается в том, что я не знаю, как объединить потоки, чтобы вернуться к 1. и позже. 2. Я просто знаю, как это сделать один раз и последовательно. Но мне нужно поведение, описанное выше.
Привет! Это выглядит захватывающе! Оператор repeat() начнет работу. Слияния() или comb_latest() или with_latest_from() объединяют источники. Я напишу ответ, в котором предлагается решение. –