Support max event count in async::event_loop::pump
This commit is contained in:
parent
834d9408ff
commit
11614b3c1b
2 changed files with 7 additions and 5 deletions
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue