diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/base/platform/unix/EventLoop.h | 16 | ||||
-rw-r--r-- | include/cru/base/platform/unix/UnixFile.h | 4 |
2 files changed, 16 insertions, 4 deletions
diff --git a/include/cru/base/platform/unix/EventLoop.h b/include/cru/base/platform/unix/EventLoop.h index b735ef26..784cb780 100644 --- a/include/cru/base/platform/unix/EventLoop.h +++ b/include/cru/base/platform/unix/EventLoop.h @@ -1,6 +1,5 @@ #pragma once -#include <optional> #if !defined(__unix) && !defined(__APPLE__) #error "This file can only be included on unix." #endif @@ -9,9 +8,12 @@ #include "../../Exception.h" #include "UnixFile.h" +#include <poll.h> #include <unistd.h> #include <chrono> +#include <optional> #include <thread> +#include <utility> namespace cru::platform::unix { class UnixTimerFile : public Object2 { @@ -84,13 +86,19 @@ class UnixEventLoop : public Object2 { action(std::move(action)) {} }; -private: + private: + bool CheckPoll(); + bool CheckTimer(); bool ReadTimerPipe(); -private: - + private: std::thread::id running_thread_; + std::vector<pollfd> polls_; + std::vector< + std::function<void(decltype(std::declval<pollfd>().revents) revent)>> + poll_actions_; + std::atomic_int timer_tag_; std::vector<TimerData> timers_; diff --git a/include/cru/base/platform/unix/UnixFile.h b/include/cru/base/platform/unix/UnixFile.h index a5f1eb81..5754b07b 100644 --- a/include/cru/base/platform/unix/UnixFile.h +++ b/include/cru/base/platform/unix/UnixFile.h @@ -41,6 +41,10 @@ class UnixFileDescriptor { * If O_NONBLOCK is set and EAGAIN or EWOULDBLOCK is returned, -1 is returned. */ ssize_t Read(void* buffer, size_t size); + /** + * If O_NONBLOCK is set and EAGAIN or EWOULDBLOCK is returned, -1 is returned. + */ + ssize_t Write(const void* buffer, size_t size); void SetFileDescriptorFlags(int flags); private: |