#include "../test.h"
SCENARIO("timer", "[!hide][periodically][timer][scheduler][long][perf][sources]"){
GIVEN("the timer of 1 sec"){
WHEN("the period is 1 sec"){
using namespace std::chrono;
auto sc = rxsc::make_current_thread();
auto so = rx::synchronize_in_one_worker(sc);
auto start = sc.now();
auto period = seconds(1);
rx::composite_subscription cs;
rx::observable<>::timer(period, so)
.subscribe(
cs,
[=](long counter){
auto nsDelta = duration_cast<milliseconds>(sc.now() - (start + (period * counter)));
std::cout << "timer : period " << counter << ", " << nsDelta.count() << "ms delta from target time" << std::endl;
},
[](rxu::error_ptr){abort();},
[](){std::cout << "completed" << std::endl;});
}
}
}