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

View file

@ -49,14 +49,17 @@ namespace psemek::async
return queue_.size(); 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(); auto t = queue_.try_pop();
if (!t) break; if (!t) break;
(*t)(); (*t)();
++events;
} }
return events;
} }
} }