Support max event count in async::event_loop::pump

This commit is contained in:
Nikita Lisitsa 2022-02-05 12:37:22 +03:00
parent 834d9408ff
commit 11614b3c1b
2 changed files with 7 additions and 5 deletions

View file

@ -3,8 +3,7 @@
#include <psemek/async/executor.hpp>
#include <psemek/util/synchronyzed_queue.hpp>
#include <deque>
#include <vector>
#include <optional>
namespace psemek::async
{
@ -29,7 +28,7 @@ namespace psemek::async
~event_loop() override { stop(); }
// wait all non-delayed events
void pump();
std::size_t pump(std::optional<std::size_t> max_events = std::nullopt);
private:
util::synchronized_queue<task> queue_;

View file

@ -49,14 +49,17 @@ namespace psemek::async
return queue_.size();
}
void event_loop::pump()
std::size_t event_loop::pump(std::optional<std::size_t> max_events)
{
while (true)
std::size_t events = 0;
while (!max_events || events < *max_events)
{
auto t = queue_.try_pop();
if (!t) break;
(*t)();
++events;
}
return events;
}
}