jobber: wait_for and wait_until

This commit is contained in:
2018-12-06 18:25:46 +07:00
parent de8299a3ee
commit 719aa6bb6d
4 changed files with 108 additions and 13 deletions

View File

@@ -69,6 +69,35 @@ TEST_CASE("jobber") {
j.resume();
j.wait_all();
}
{
jobber j(1);
i32 counter = 0;
j.pause();
for ( std::size_t i = 0; i < 10; ++i ) {
j.async([&counter](){
++counter;
std::this_thread::sleep_for(std::chrono::milliseconds(15));
});
}
const auto b = time::now_ms();
j.wait_for(make_milliseconds(15));
REQUIRE(time::now_ms() - b > make_milliseconds<i64>(10));
REQUIRE(counter == 0);
j.wait_until(time::now_ms() + make_milliseconds<i64>(15));
REQUIRE(time::now_ms() - b > make_milliseconds<i64>(20));
REQUIRE(counter == 0);
j.active_wait_for(make_milliseconds(60));
REQUIRE(time::now_ms() - b > make_milliseconds<i64>(70));
REQUIRE(counter > 2);
REQUIRE(counter < 10);
j.active_wait_until(time::now_s() + make_seconds<i64>(1));
REQUIRE(counter == 10);
}
{
jobber j(2);
jobber g(2);

View File

@@ -29,13 +29,13 @@ TEST_CASE("scheduler") {
std::this_thread::sleep_for(std::chrono::milliseconds(15));
});
}
s.process_all_tasks_for(make_milliseconds(-1));
s.process_all_tasks_for(make_milliseconds(0));
s.process_tasks_for(make_milliseconds(-1));
s.process_tasks_for(make_milliseconds(0));
REQUIRE(counter == 0);
s.process_all_tasks_for(make_milliseconds(60));
s.process_tasks_for(make_milliseconds(60));
REQUIRE(counter > 2);
REQUIRE(counter < 10);
s.process_all_tasks_for(make_seconds(1));
s.process_tasks_for(make_seconds(1));
REQUIRE(counter == 10);
}
{
@@ -47,13 +47,13 @@ TEST_CASE("scheduler") {
std::this_thread::sleep_for(std::chrono::milliseconds(15));
});
}
s.process_all_tasks_until(time::now_ms() - make_milliseconds<i64>(1));
s.process_all_tasks_until(time::now_ms());
s.process_tasks_until(time::now_ms() - make_milliseconds<i64>(1));
s.process_tasks_until(time::now_ms());
REQUIRE(counter == 0);
s.process_all_tasks_until(time::now_ms() + make_milliseconds<i64>(60));
s.process_tasks_until(time::now_ms() + make_milliseconds<i64>(60));
REQUIRE(counter > 2);
REQUIRE(counter < 10);
s.process_all_tasks_until(time::now_s() + make_seconds<i64>(1));
s.process_tasks_until(time::now_s() + make_seconds<i64>(1));
REQUIRE(counter == 10);
}
{