Blog‎ > ‎Articoli‎ > ‎

ReactiveX - Appunti C++ con RxCpp

pubblicato 13 apr 2017, 05:35 da Rudy Azzan   [ aggiornato in data 24 apr 2017, 10:31 ]

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();
Comments