diff --git a/libs/async/include/psemek/async/event_loop.hpp b/libs/async/include/psemek/async/event_loop.hpp index 9efee81e..35b7d9db 100644 --- a/libs/async/include/psemek/async/event_loop.hpp +++ b/libs/async/include/psemek/async/event_loop.hpp @@ -3,8 +3,7 @@ #include #include -#include -#include +#include 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 max_events = std::nullopt); private: util::synchronized_queue queue_; diff --git a/libs/async/source/event_loop.cpp b/libs/async/source/event_loop.cpp index 0968b214..546694c8 100644 --- a/libs/async/source/event_loop.cpp +++ b/libs/async/source/event_loop.cpp @@ -49,14 +49,17 @@ namespace psemek::async return queue_.size(); } - void event_loop::pump() + std::size_t event_loop::pump(std::optional 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; } }