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/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_;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue