Add wrapper for uv_async_t

This commit is contained in:
patrick96 2021-09-12 15:57:05 +02:00 committed by Patrick Ziegler
parent 7b5285b51e
commit 2551ea0205
3 changed files with 13 additions and 10 deletions

View File

@ -1,7 +1,6 @@
#pragma once #pragma once
#include <moodycamel/blockingconcurrentqueue.h> #include <moodycamel/blockingconcurrentqueue.h>
#include <uv.h>
#include <mutex> #include <mutex>
#include <thread> #include <thread>
@ -117,7 +116,7 @@ class controller : public signal_receiver<SIGN_PRIORITY_CONTROLLER, signals::eve
* This handle is used to notify the eventloop of changes which are not otherwise covered by other handles. * This handle is used to notify the eventloop of changes which are not otherwise covered by other handles.
* E.g. click actions. * E.g. click actions.
*/ */
std::unique_ptr<uv_async_t> m_notifier{nullptr}; std::unique_ptr<AsyncHandle> m_notifier{nullptr};
/** /**
* Notification data for the controller. * Notification data for the controller.

View File

@ -138,6 +138,16 @@ struct TimerHandle : public UVHandle<uv_timer_t> {
} }
}; };
struct AsyncHandle : public UVHandle<uv_async_t> {
AsyncHandle(uv_loop_t* loop, std::function<void(void)> fun) : UVHandle(fun) {
UV(uv_async_init, loop, handle.get(), &cb.callback);
}
void send() {
UV(uv_async_send, handle.get());
}
};
class eventloop { class eventloop {
public: public:
eventloop(); eventloop();

View File

@ -158,7 +158,7 @@ void controller::trigger_update(bool force) {
void controller::trigger_notification() { void controller::trigger_notification() {
if (m_eloop_ready) { if (m_eloop_ready) {
UV(uv_async_send, m_notifier.get()); m_notifier->send();
} }
} }
@ -237,10 +237,6 @@ void controller::notifier_handler() {
} }
} }
static void notifier_cb_wrapper(uv_async_t* handle) {
static_cast<controller*>(handle->data)->notifier_handler();
}
void controller::screenshot_handler() { void controller::screenshot_handler() {
m_sig.emit(signals::ui::request_snapshot{move(m_snapshot_dst)}); m_sig.emit(signals::ui::request_snapshot{move(m_snapshot_dst)});
trigger_update(true); trigger_update(true);
@ -280,9 +276,7 @@ void controller::read_events(bool confwatch) {
ipc_handle->start(m_ipc->get_file_descriptor()); ipc_handle->start(m_ipc->get_file_descriptor());
} }
m_notifier = std::make_unique<uv_async_t>(); m_notifier = std::make_unique<AsyncHandle>(loop, [this]() { notifier_handler(); });
UV(uv_async_init, loop, m_notifier.get(), notifier_cb_wrapper);
m_notifier->data = this;
if (!m_snapshot_dst.empty()) { if (!m_snapshot_dst.empty()) {
screenshot_timer_handle = std::make_unique<TimerHandle>(loop, [this]() { screenshot_handler(); }); screenshot_timer_handle = std::make_unique<TimerHandle>(loop, [this]() { screenshot_handler(); });