19 #ifndef MIR_ASIO_MAIN_LOOP_H_
20 #define MIR_ASIO_MAIN_LOOP_H_
24 #include <boost/asio.hpp>
25 #include <boost/optional.hpp>
45 explicit AsioMainLoop(std::shared_ptr<time::Clock>
const& clock);
52 std::initializer_list<int> signals,
53 std::function<
void(
int)>
const& handler);
56 std::initializer_list<int> fd,
58 std::function<
void(
int)>
const& handler)
override;
62 std::unique_ptr<time::Alarm>
notify_in(std::chrono::milliseconds delay,
63 std::function<
void()> callback)
override;
65 std::function<
void()> callback)
override;
66 std::unique_ptr<time::Alarm>
create_alarm(std::function<
void()> callback)
override;
75 bool should_process(
void const*);
76 void process_server_actions();
78 boost::asio::io_service io;
79 boost::asio::io_service::work work;
80 boost::optional<std::thread::id> main_loop_thread;
81 std::vector<std::unique_ptr<SignalHandler>> signal_handlers;
82 std::vector<std::shared_ptr<FDHandler>> fd_handlers;
83 std::mutex fd_handlers_mutex;
84 std::mutex server_actions_mutex;
85 std::deque<std::pair<void const*,ServerAction>> server_actions;
86 std::set<void const*> do_not_process;
87 std::shared_ptr<time::Clock>
const clock;
Definition: asio_main_loop.h:42
All things Mir.
Definition: aging_buffer.h:24
std::chrono::high_resolution_clock::time_point Timestamp
Definition: clock.h:29
void resume_processing_for(void const *owner)
Definition: asio_main_loop.cpp:518
void unregister_fd_handler(void const *owner) override
Definition: asio_main_loop.cpp:299
void register_signal_handler(std::initializer_list< int > signals, std::function< void(int)> const &handler)
Definition: asio_main_loop.cpp:270
void run()
Definition: asio_main_loop.cpp:258
std::unique_ptr< time::Alarm > create_alarm(std::function< void()> callback) override
Create an Alarm that will not fire until scheduled.
Definition: asio_main_loop.cpp:497
void pause_processing_for(void const *owner)
Definition: asio_main_loop.cpp:512
void stop()
Definition: asio_main_loop.cpp:264
std::function< void()> ServerAction
Definition: server_action_queue.h:27
Definition: main_loop.h:29
~AsioMainLoop() noexcept(true)
Definition: asio_main_loop.cpp:254
std::unique_ptr< time::Alarm > notify_in(std::chrono::milliseconds delay, std::function< void()> callback) override
Create an Alarm that calls the callback after the specified delay.
Definition: asio_main_loop.cpp:485
std::unique_ptr< time::Alarm > notify_at(mir::time::Timestamp time_point, std::function< void()> callback) override
Create an Alarm that calls the callback at the specified time.
Definition: asio_main_loop.cpp:491
void enqueue(void const *owner, ServerAction const &action)
Definition: asio_main_loop.cpp:502
void register_fd_handler(std::initializer_list< int > fd, void const *owner, std::function< void(int)> const &handler) override
Definition: asio_main_loop.cpp:284
AsioMainLoop(std::shared_ptr< time::Clock > const &clock)
Definition: asio_main_loop.cpp:248