aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-05 22:08:42 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-05 22:08:42 +0800
commit79fda9ada7878afef263f4786fd3967ec6dbfdc7 (patch)
tree951625d93e73758209381c4da801adfa4807f396 /include
parent4c3098be1c5abaed610b8f10216d59829fc107ce (diff)
downloadcru-79fda9ada7878afef263f4786fd3967ec6dbfdc7.tar.gz
cru-79fda9ada7878afef263f4786fd3967ec6dbfdc7.tar.bz2
cru-79fda9ada7878afef263f4786fd3967ec6dbfdc7.zip
Add ReadTimerPipe.
Diffstat (limited to 'include')
-rw-r--r--include/cru/base/platform/unix/EventLoop.h8
-rw-r--r--include/cru/base/platform/unix/UnixFile.h3
2 files changed, 11 insertions, 0 deletions
diff --git a/include/cru/base/platform/unix/EventLoop.h b/include/cru/base/platform/unix/EventLoop.h
index bc2bcbf8..b735ef26 100644
--- a/include/cru/base/platform/unix/EventLoop.h
+++ b/include/cru/base/platform/unix/EventLoop.h
@@ -84,11 +84,19 @@ class UnixEventLoop : public Object2 {
action(std::move(action)) {}
};
+private:
+ bool ReadTimerPipe();
+
+private:
+
std::thread::id running_thread_;
std::atomic_int timer_tag_;
std::vector<TimerData> timers_;
+ UnixFileDescriptor timer_pipe_read_end_;
+ UnixFileDescriptor timer_pipe_write_end_;
+
std::optional<int> exit_code_;
};
diff --git a/include/cru/base/platform/unix/UnixFile.h b/include/cru/base/platform/unix/UnixFile.h
index 8ce3249d..a5f1eb81 100644
--- a/include/cru/base/platform/unix/UnixFile.h
+++ b/include/cru/base/platform/unix/UnixFile.h
@@ -37,6 +37,9 @@ class UnixFileDescriptor {
explicit operator bool() const { return this->IsValid(); }
operator int() const { return this->GetValue(); }
+ /**
+ * If O_NONBLOCK is set and EAGAIN or EWOULDBLOCK is returned, -1 is returned.
+ */
ssize_t Read(void* buffer, size_t size);
void SetFileDescriptorFlags(int flags);