Add util::event_loop executor
This commit is contained in:
parent
daf1a3c5f4
commit
9fa32c2dd1
2 changed files with 68 additions and 0 deletions
32
libs/util/include/psemek/util/event_loop.hpp
Normal file
32
libs/util/include/psemek/util/event_loop.hpp
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <psemek/util/executor.hpp>
|
||||||
|
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
|
namespace psemek::util
|
||||||
|
{
|
||||||
|
|
||||||
|
struct event_loop
|
||||||
|
: executor
|
||||||
|
{
|
||||||
|
void post(task t) override;
|
||||||
|
|
||||||
|
void stop() override {}
|
||||||
|
|
||||||
|
void wait() override;
|
||||||
|
|
||||||
|
void wait_for(clock::duration period) override;
|
||||||
|
|
||||||
|
void wait_until(clock::time_point time) override;
|
||||||
|
|
||||||
|
std::size_t task_count() const override { return task_queue_.size(); }
|
||||||
|
|
||||||
|
~event_loop() override { stop(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::deque<task> task_queue_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
36
libs/util/source/event_loop.cpp
Normal file
36
libs/util/source/event_loop.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include <psemek/util/event_loop.hpp>
|
||||||
|
|
||||||
|
namespace psemek::util
|
||||||
|
{
|
||||||
|
|
||||||
|
void event_loop::post(task t)
|
||||||
|
{
|
||||||
|
task_queue_.push_back(std::move(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_loop::wait()
|
||||||
|
{
|
||||||
|
while (!task_queue_.empty())
|
||||||
|
{
|
||||||
|
auto t = std::move(task_queue_.front());
|
||||||
|
task_queue_.pop_front();
|
||||||
|
t();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_loop::wait_for(clock::duration period)
|
||||||
|
{
|
||||||
|
wait_until(clock::now() + period);
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_loop::wait_until(clock::time_point time)
|
||||||
|
{
|
||||||
|
while (!task_queue_.empty() && clock::now() < time)
|
||||||
|
{
|
||||||
|
auto t = std::move(task_queue_.front());
|
||||||
|
task_queue_.pop_front();
|
||||||
|
t();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue