ReactiveX - Appunti C++ con RxCpp
Post date: Apr 13, 2017 12:35:37 PM
Operazione dopo periodo di tempo, con guardia
Questo codice esegue un operazione per N (repeats) volte quando passa un controllo di guardia (v > nextCheck), che viene effettuato una volta ogni secondo
int repeats = 4; int nextCheck = 5; auto period = chrono::milliseconds(1000); auto values = rxcpp::observable<>::interval(period).filter([&](int v){ return v > nextCheck; }).take(repeats); values.as_blocking().subscribe( [&](int v){ uni::Logger::WriteMessage(QString("OnNext: %1\n").arg(v).toStdString().c_str()); nextCheck += 5; }, [](){ uni::Logger::WriteMessage("OnComplete\n"); } );
Gestione accensione e lettura barcode reader
In questo esempio, accendo un lettore barcode e lo spengo dopo 7000 millisecondi se non ha letto. In caso contrario, il lettore si spegne da solo
auto period = std::chrono::milliseconds(7000); auto ints = rxcpp::observable<>::create<int>( [](rxcpp::subscriber<int> s){ s.on_next(1); s.on_completed(); }).delay(period, rxcpp::observe_on_event_loop()); auto promessa = ints.subscribe( [](int v) { //LOG_DEBUG("OnNext: Eccolo"); //Spegne lettore barcode }); //LOG_DEBUG("Esegue turnOn"); //Accende lettore barcode //Se ha trovato un barcode, il thread viene liberato e uscendo dallo scope della funzione //il lettore si spegne da solo, quindi annullo l'operazione di spegnimento programmata dopo 7000 millisecondi promessa.unsubscribe();