From 11614b3c1b98192677458579ed017f9018533c20 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 5 Feb 2022 12:37:22 +0300 Subject: [PATCH] Support max event count in async::event_loop::pump --- libs/async/include/psemek/async/event_loop.hpp | 5 ++--- libs/async/source/event_loop.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) 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; } }